经过长时间的网络搜索,我了解到 SOCKS 使用握手协议来通知代理软件客户端正在尝试建立的连接,然后尽可能透明地运行,而 HTTP 代理可能会解释和重写标头。我们也可以同时使用两者。
我想知道的是,我们如何才能知道代理是 HTTP、SOCKS4、SOCKS4a 还是 SOCKS5?有什么方法可以找到吗?我猜我们无法根据端口号来区分它,因为每种类型都有很多可用的端口号。请帮我根据 HTTP 或 SOCKS 来区分代理。
答案1
尝试一下这个小 Python 脚本:
#!/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
答案2
您可以尝试使用工具“nmap”来检测该端口上的服务的版本。
例如:
nmap -sV -p{port} {server}
在下面的示例中,您可以看到它是一个 HTTP(与 SOCKS 相对)代理:
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