Найти веб-сервер, прослушивающий порт с помощью сканера портов Scapy - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь написать сканер портов в Python для Scapy, чтобы узнать, на каком порту слушает веб-сервер. Сервер не использует порт 80 и порт 443. Диапазон сканирования составляет от 5000 до 10000 (это назначение для университета). Для этого мне нужно использовать Scapy, поэтому nmap и другие не допускаются.

Код, который я написал до сих пор (это адаптация этой оригинальной работы https://is.muni.cz/th/n9spk/dp.pdf):

target = "172.16.51.142"
ports = range(5000, 10000)
ip = IP(dst=target)
tcp = TCP(dport=ports , flags="S") # SYN flag
ans, unans = sr(ip/tcp) # send packets
for sent, rcvd in ans:
    if rcvd.haslayer(TCP): # TCP packet
        if rcvd.haslayer(TCP).flags & 2: # SYN/ACK flag
            print (sent.dport) # open ports

Первая часть, пока for-l oop работает как положено:

result of portscan, response of webserver

Но когда for-l oop запускается, я получаю следующую ошибку:

enter image description here

Я не знаю, как решить эту проблему.

Я использовал онлайн-документацию https://scapy.readthedocs.io/en/latest/usage.html#send -and-receive-packages-sr и https://scapy.readthedocs.io/en/latest/usage.html#tcp -port-scan , но не смог найти решение.

1 Ответ

1 голос
/ 13 апреля 2020

rcvd.haslayer(TCP).flags невозможно, так как haslayer возвращает логическое значение. Вы ищете

rcvd.getlayer(TCP).flags
...