プロキシが HTTP か SOCKS かを検出する

プロキシが HTTP か SOCKS かを検出する

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

https://nmap.org/book/man-version-detection.html

関連情報