
基於在網路上的長時間搜索,我了解到 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