У меня есть этот код ниже, который я хочу использовать для извлечения некоторых данных через указанный c порт TCP (502).
import struct
import socket
def ethernet_frame(data):
dest_mac, src_mac,proto = struct.unpack('! 6s 6s H', data[:14])
return socket.htons(proto), data[14:]
def ipv4_Packet(data):
version_header_len = data[0]
version = version_header_len >> 4
header_len = (version_header_len & 15) * 4
ttl, proto, src, target = struct.unpack('! 8x B B 2x 4s 4s', data[:20])
return version, header_len, ttl, proto, ipv4(src), ipv4(target), data[header_len:]
def ipv4(addr):
return '.'.join(map(str, addr))
conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
while True:
raw_data, addr = conn.recvfrom(65536)
eth_proto, data = ethernet_frame(raw_data)
if eth_proto == 8:
(version, header_length, ttl, proto, src, target, data) = ipv4_Packet(data)
if proto==6:
src_port, dest_port, sequence, acknowledgment, flag_urg, flag_ack, flag_psh, flag_rst, flag_syn, flag_fin = struct.unpack('! H H L L H H H H H H', raw_data[:24])
print('Source Port: {}, Destination Port: {}'.format(src_port,dest_port))
Когда я пытаюсь установить связь со вторым компьютером в моей сети на порту 502, обычно на wireshark, я получаю, что source_port равен 47000, а dest_port равен 502 (и наоборот src_port = 502 и dest_port = 47000 ..), но когда я выполняю этот код для прослушивания в сети и возврата src_port и dest_port, я получаю это вместо:
Порт источника: 19506, Порт назначения: 30101
Порт источника: 19506, Порт назначения: 30101
Порт источника: 2048, Порт назначения: 10002
Порт источника: 2048, Порт назначения: 10002