
Com base na longa pesquisa na rede, descobri que o SOCKS usa um protocolo de handshake para informar ao software proxy sobre a conexão que o cliente está tentando fazer e então age da forma mais transparente possível, enquanto um proxy HTTP pode interpretar e reescrever cabeçalhos . E podemos usar ambos também.
O que eu quero saber é como podemos saber se o proxy é HTTP, SOCKS4, SOCKS4a ou SOCKS5? Existe alguma maneira de descobrir? E posso adivinhar que não podemos diferir com base no número da porta porque há muitos números de porta disponíveis para cada um dos tipos. Por favor, ajude-me a diferenciar o proxy baseado em HTTP ou SOCKS.
Responder1
Experimente este pequeno script 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
Responder2
Você poderia tentar usar a ferramenta 'nmap' para tentar detectar a versão do serviço nessa porta.
Por exemplo:
nmap -sV -p{port} {server}
No exemplo abaixo, você pode ver que é um proxy HTTP (versus 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