套接字库Python,如何格式化收到的数据包?

时间:2019-04-24 08:58:30

标签: python sockets ethernet

我正在使用以下两个代码发送和接收以太网数据包。但是我想格式化我的原始以太网数据包并获取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

0 个答案:

没有答案