Распознать прикладной протокол по сигнатуре (NTP/DNS/SMTP/POP3/IMAP/HTTP)
Пишу сканер TCP- и UDP-портов удалённого компьютера.
Пример проверки открытого порта для UDP:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket.setdefaulttimeout(2.0) # seconds (float)
result = sock.connect_ex((ip, port))
if result == 0:
listUDP.append(port)
listUDP.append(sock.getsockname())
sock.close()
Как получить, проанализировать пакет и понять за какой прикладной протокол NTP/DNS/SMTP/POP3/IMAP/HTTP ответственен порт по заданному IP-адресу?
P.S. проект на Python3
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Чтоб понять что за протокол на сервере нужно отправить ему клиентский запрос. Например GET / для http и если ответит - это http сервер.
Для ООП с низко-уровневым разбором пакета рекомендую библиотеку scapy
req = HTTP()/HTTPRequest(
Accept_Encoding=b'gzip, deflate',
Cache_Control=b'no-cache',
Connection=b'keep-alive',
Host=b'www.secdev.org',
Pragma=b'no-cache'
)
a = TCP_client.tcplink(HTTP, "www.secdev.org", 80)
answer = a.sr1(req)
a.close()
print(answer.Status_Code)