
ネットで長時間検索した結果、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