我正在使用以下两个代码发送和接收以太网数据包。但是我想格式化我的原始以太网数据包并获取IP值。可以看出,输出数据包是二进制的。我可以使用图书馆吗?什么是最好的方法?我真的手动格式化此二进制文件吗,换句话说,就是通过编写函数来格式化它们。.
#!/usr/bin/python
from socket import socket, AF_PACKET, SOCK_RAW, htons
from struct import *
import select
import time
ETH_P_ALL = 3
ETH_P_IP = 0x800
s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
s.bind(("enp0s3", 0))
src_addr = "\x08\x00\x27\x92\x82\x1c"
dst_addr = "\x08\x00\x27\x92\x82\x1c"
l = "\x00\x21"
ethertype = "\x08\x01"
a ="\x00\x10\x00\x10\x00\x10"
b = "\x00\x11\x00\x11\x00\x11"
payload = ethertype + l + a + b
while True:
s.send(dst_addr+src_addr+ payload)
time.sleep(5)
上面的代码发送数据,下面的代码接收数据:
#!/usr/bin/python
from socket import socket, AF_PACKET, SOCK_RAW, htons
from struct import *
import select
import time
ETH_P_ALL = 3
ETH_P_IP = 0x800
s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
s.bind(("enp0s3", 0))
while True:
message=s.recv(4096)
print (' '.join(format(ord(x), 'b') for x in message)))
代码接收的数据为:
1000 0 100111 10010010 10000010 11100 1000 0 100111 10010010 10000010 11100 1000 1 0 100001 0 10000 0 10000 0 10000 0 10001 0 10001 0 10001