
Durch langes Suchen im Internet habe ich herausgefunden, dass SOCKS ein Handshake-Protokoll verwendet, um die Proxy-Software über die Verbindung zu informieren, die der Client herzustellen versucht, und dann so transparent wie möglich handelt, während ein HTTP-Proxy Header interpretieren und neu schreiben kann. Und wir können beides gleichermaßen verwenden.
Ich möchte wissen, wie wir herausfinden können, ob der Proxy HTTP, SOCKS4, SOCKS4a oder SOCKS5 ist. Gibt es eine Möglichkeit, das herauszufinden? Und ich vermute, dass wir es nicht anhand der Portnummer unterscheiden können, da für jeden Typ viele Portnummern verfügbar sind. Bitte helfen Sie mir, den Proxy anhand von HTTP oder SOCKS zu unterscheiden.
Antwort1
Probieren Sie dieses kleine Python-Skript aus:
#!/usr/bin/python
import struct
import socket
import sys
try:
server = sys.argv[1]
port = sys.argv[2]
except:
print "Usage: server port"
try:
sen = struct.pack('BBB', 0x05, 0x01, 0x00)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(( server , int( port ) ))
s.sendall(sen)
data = s.recv(2)
s.close()
version, auth = struct.unpack('BB', data)
print 'server : port is ', server, ':', port, '; varsion: ', version
except Exception as e:
print e
Antwort2
Sie können versuchen, mit dem Tool „nmap“ die Version des Dienstes auf diesem Port zu ermitteln.
Zum Beispiel:
nmap -sV -p{port} {server}
Im folgenden Beispiel können Sie sehen, dass es sich um einen HTTP-Proxy (im Gegensatz zu SOCKS-Proxy) handelt:
my-desktop ~ # nmap -sV -p8080 192.168.3.40
Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 10:46 CST
Nmap scan report for 192.168.3.40
Host is up (0.00036s latency).
PORT STATE SERVICE VERSION
8080/tcp open http-proxy Squid http proxy 3.3.8
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.45 seconds