Anonymous
TCP-сканирование с использованием TCP SYN и наличие ошибки OS: [WinError 10022] Был указан недопустимый аргумент
Сообщение
Anonymous » 18 дек 2025, 00:21
мне пришла задача сделать tcp-сканер методом TCP SYN,
Код: Выделить всё
from scapy.all import *
from scapy.layers.inet import IP, UDP, ICMP, TCP
def tcp_scan(destination_ip : str, ports : list[int]):
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
sock.setblocking(False)
send_times = {}
results = {}
for port in ports:
pkt = IP(dst=destination_ip) / TCP(sport=1234, dport=port, flags="S")
send_times[port] = time.time()
sock.sendto(bytes(pkt), (destination_ip, port))
deadline = time.time() + TIMEOUT
while time.time() < deadline:
rlist, wlist, xlist = select.select([sock], [], [], TIMEOUT)
if not rlist:
continue
data, addr = sock.recvfrom(65535)
ip = IP(data)
tcp = ip[TCP]
port = tcp.sport
flags = tcp.flags
response_time = (time.time() - send_times[port]) * 1000
if flags & 0x12 == 0x12:
results[port] = "open", response_time
RST = IP(dst=destination_ip) / TCP(sport=1234, dport=port, flags="R", seq=tcp.ack)
sock.sendto(bytes(RST), (destination_ip, 0))
if flags & 0x14 == 0x14:
results[port] = "closed", response_time
return results
ip_address = "1.1.1.1"
port_list = [8000, 8001, 8002, 8003]
tcp = tcp_scan(ip_address, port_list)
это метод, который делает это, к сожалению, он не работает из-за
sock.sendto(bytes(pkt), (destination_ip, port))
Код: Выделить всё
[WinError 10022] An invalid argument was supplied
я пробовал менять параметры сокета, менять порт, все равно не работает
Подробнее здесь:
https://stackoverflow.com/questions/798 ... alid-argum
1766006487
Anonymous
мне пришла задача сделать tcp-сканер методом TCP SYN, [code]from scapy.all import * from scapy.layers.inet import IP, UDP, ICMP, TCP def tcp_scan(destination_ip : str, ports : list[int]): sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) sock.setblocking(False) send_times = {} results = {} for port in ports: pkt = IP(dst=destination_ip) / TCP(sport=1234, dport=port, flags="S") send_times[port] = time.time() sock.sendto(bytes(pkt), (destination_ip, port)) deadline = time.time() + TIMEOUT while time.time() < deadline: rlist, wlist, xlist = select.select([sock], [], [], TIMEOUT) if not rlist: continue data, addr = sock.recvfrom(65535) ip = IP(data) tcp = ip[TCP] port = tcp.sport flags = tcp.flags response_time = (time.time() - send_times[port]) * 1000 if flags & 0x12 == 0x12: results[port] = "open", response_time RST = IP(dst=destination_ip) / TCP(sport=1234, dport=port, flags="R", seq=tcp.ack) sock.sendto(bytes(RST), (destination_ip, 0)) if flags & 0x14 == 0x14: results[port] = "closed", response_time return results ip_address = "1.1.1.1" port_list = [8000, 8001, 8002, 8003] tcp = tcp_scan(ip_address, port_list) [/code] это метод, который делает это, к сожалению, он не работает из-за sock.sendto(bytes(pkt), (destination_ip, port)) [code][WinError 10022] An invalid argument was supplied [/code] я пробовал менять параметры сокета, менять порт, все равно не работает Подробнее здесь: [url]https://stackoverflow.com/questions/79849837/tcp-scanning-using-tcp-syn-and-having-oserror-winerror-10022-an-invalid-argum[/url]