Fiz um código de um portscan syn com scapy e socket, e aparentemente ele rodou sem nenhum error, porém os resultados não batem, pois ele está relatando que o alvo scaneado está com a porta 80 fechada, só que ao comparar com o nmap usando syn ack nmap -sS --script=default mostra a 80 aberta 22 também aberta. VEJA abaixo o código e o print do resultado:
import socket
from scapy.all import *
ip = input('Qual o host?:')
s = socket.socket()
ports = [20,21,22,23,25,53,80,110,127,139,143,145,465,587,1194,3306,3389]
def checking():
ping = IP(dst=ip)/ICMP()
res = sr1(ping, timeout=1, verbose=0)
if res == None:
print('Host is down')
else:
print('host is up')
for p in ports:
req = IP(dst=ip)/TCP(dport=ports, flags='S')
resp = sr1(req, timeout=1, verbose=0)
s.settimeout(1)
try:
if resp.getlayer(TCP).flags == 'SA':
print(p, 'aberta')
except Exception as e:
print(p, 'fechada')
checking()