检测代理是 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

相关内容