
На основе долгих поисков в сети я узнал, что 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