Я пытался с этими кодами соединиться с протоколом Ethernet / Profinet. Я нашел этот тип кодов.Но когда я запускаю программу с этой строкой-1, я не получаю никакой ошибки.Моя программа работает, но когда я наблюдаю за Wireshark, моя информация о соединении говорит-2
1
sudo python3 discovery.py
2
Wireshark malformed packet PN-RT
Да, он знает, что это протокол Profinet,но почему уродливый?Как я могу исправить?
Это мой код Python:
#!/usr/bin/env python
import binascii
from socket import *
from fcntl import ioctl
import struct
import fcntl, struct
value='!6s6sH'
s=socket(AF_PACKET, SOCK_RAW)
s.bind(('enp2s0',1))
class EtherPacket:
def __init__(self, dst='25:36:73:32:74:48', src='c3:82:c5:b8:c2:81', protocol=0x8892):
self.dst = dst # Destination MAC
self.src = src # Source MAC
self.protocol = protocol # Protocol Types
self.raw ="" # Raw Data
self.assemble_eth_feilds()
def assemble_eth_feilds(self):
# Assemble All Feilds Of Ether Packet
self.raw = struct.pack( \
value.encode('ascii'),\
binascii.unhexlify(self.dst.replace(":","")),\
binascii.unhexlify(self.src.replace(":","")),\
self.protocol,\
)
return self.raw
def main():
pkt = EtherPacket()
s.sendto(pkt.raw, ('enp2s0' , 0 ))
if __name__=='__main__':
main()