Я не могу на всю жизнь понять, почему я не вижу ни одного syn / ack в моем сетевом анализаторе. Я хочу регистрировать новые соединения и их направления, поэтому я подумал, что id capture traffi c и поиск Syn / ack, но он не работает. Это на windows, не знаю, работает ли он лучше на linux, но важно, чтобы я включил его на windows.
, это в основном тестовый код:
Основной код:
import socket
import struct
import binascii
import os
import logger
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
s.bind(("192.168.1.12",0))
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
while True:
pkt=s.recvfrom(65535)
unpack=logger.unpack()
IPhead = unpack.ip_header(pkt[0][0:20])
if IPhead["Protocol"] == 6:
#TCP Protocol
TCPhead = unpack.tcp_header(pkt[0][20:40])
print (TCPhead["Tcp Flag"])
#this is what i want to do so i can continue the program but it never enters this if.
if TCPhead["Tcp Flag"] == 18:
logger.py
import socket
import struct
import binascii
import os
class unpack:
def __cinit__(self):
self.data=None
# Tcp Header Extraction
def tcp_header(self, data):
storeobj=struct.unpack('!HHLLBBHHH',data)
_source_port =storeobj[0]
_destination_port =storeobj[1]
_sequence_number =storeobj[2]
_acknowledge_number =storeobj[3]
_offset_reserved =storeobj[4]
_tcp_flag =storeobj[5]
_window =storeobj[6]
_checksum =storeobj[7]
_urgent_pointer =storeobj[8]
data={"Source Port":_source_port,"Destination Port":_destination_port,"Sequence Number":_sequence_number,"Acknowledge Number":_acknowledge_number,"Offset & Reserved":_offset_reserved,"Tcp Flag":_tcp_flag,"Window":_window,"CheckSum":_checksum,"Urgent Pointer":_urgent_pointer}
return data
Все показывает правильно, (Исходный порт, Порт назначения, Срочный указатель и т. Д. c. В TCP-флагах я получаю Syns ( 2 или 0x02) Acks (16 или 0x10) fin, Acks (17 или 0x11) и pu sh, acks (24 или 0x18), но никогда не syn, ack (18 или 0x12)
Почему?
Редактировать: Запуск на windows 10 с python 3.8.2