Смотрите мой собственный Ethernet Raw Connection с Wireshark и Python - PullRequest
0 голосов
/ 19 октября 2018

Я попытался отправить сообщение по протоколу Ethernet, но не знаю, как продолжить.Я хочу отправить сообщение на свой компьютер с Ethernet и проверить обмен сообщениями с Wireshark, но не вижу никакой информации о моем сообщении.Где моя вина или что мне не хватает?Любые идеи о том, как я могу это исправить?

from socket import *
from fcntl import ioctl


import fcntl, struct



s=socket(AF_PACKET, SOCK_RAW)

s.bind(("enp2s0",0))



def get_mac(ifname):
    s = socket(AF_INET, SOCK_DGRAM)
    info = ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(ifname[:15], "ascii")))
    return info[18:24]

src = get_mac("enp2s0")
print(src)

src_addr = "\xb8\xec\xa3\x80\xeb\xb4"
payload = ("["*30)+"MESSAGE"+("]"*30)
checksum = "\x1a\x2b\x3c\x4d"
ethertype = "\x88\x92" #0x8892 profinet protocole




print((src_addr+src_addr+ethertype+payload+checksum).encode('utf-8'))

s.send((src_addr+src_addr+ethertype+payload+checksum).encode("utf-8"))

1 Ответ

0 голосов
/ 19 октября 2018

Прежде всего, ваш код должен выполняться с правами администратора (sudo или su в linux).Затем при запуске вашего кода возникает ошибка с этой трассировкой:

  Traceback (most recent call last):
  File "eth.py", line 15, in <module>
    src = get_mac("enp2s0")
  File "eth.py", line 12, in get_mac
    info = ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(ifname[:15], "ascii")))
  TypeError: str() takes at most 1 argument (2 given)

, которая обнаруживает ошибку в строке 12, точнее в bytes(ifname[:15],"ascii") Можете ли вы предоставить вывод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...