首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python套接字MAC地址格式

Python套接字MAC地址格式
EN

Stack Overflow用户
提问于 2014-12-12 08:02:47
回答 1查看 2.5K关注 0票数 0

我对python很陌生,我正在尝试创建一个数据包解析器。然后,我从套接字中从以下命令中剥离了以太网数据包:

代码语言:javascript
复制
    >>raw=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x800)) # Raw Packed Created
    >>raw=raw.recvfrom(2048) #Received data from socket
    >>raw

   ('\x01\x00^\x00\x00\x01T\xe6\xfc\xd0\x93\x10\x08\x00F\xc0\x00 \x00\x00@\x00\x01\x02Bm\xc0\xa8\x01\x01\xe0\x00\x00\x01\x94\x04\x00\x00\x11d\xee\x9b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ('eth0', 2048, 2, 1, 'T\xe6\xfc\xd0\x93\x10'))

    >> ether=raw[0][0:14] #Ethernet header

    >>ether_unpack=struct.unpack("!6s6s2s",ether) #Unpack ethernet header into string form
    >>ether_unpack #print unpacked data
    ('\x01\x00^\x00\x00\x01', 'T\xe6\xfc\xd0\x93\x10', '\x08\x00')

    >>ether_hex=binascii.hexlify(ether_unpack[0]) #converted data into hexadecimal format
    .
    .
    .
    tcpHeader=raw[0][34:54] #strippin TCP packet
    tcp_hdr=struct.unpack("!HH16s", tcpHeader) // TCP header unpack

第一个问题:‘\x01\x00^\x00\x01’的格式是什么?我的第一个输出中的数字格式是什么?

第二个问题: ether=raw;从第一个元组获得14个字节的0:14?需要确认

第三个问题:tcp_hdr=struct.unpack("!HH16s", tcpHeader)第一个论点是做什么的?我从某个地方接受了这个命令,我不明白为什么第一个参数中有'double H‘。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-06 21:33:25

1) raw的第一个元素是十六进制格式字符串,可以使用以下方法将其转换为int列表:

代码语言:javascript
复制
 >> payload = [int(x.encode('hex'), 16) for x in raw[0]]
 >> [1, 0, 94, 0, 0, 1, 84, 230, 252, 208, 147, 16, 8, 0, 70, 192, 0, 32, 0, 0, 64, 0, 1, 2, 66, 109, 192, 168, 1, 1, 224, 0, 0, 1, 148, 4, 0, 0, 17, 100, 238, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

2)是的,raw[0][0:14]接受raw元组的第一个元素的前14个字节。

3)解包函数的第一个参数是应该解压缩给定字符串的格式(https://docs.python.org/2/library/struct.html)。格式字符串的第一个字符可用于指示打包数据的字节顺序、大小和对齐方式;在本例中,!字符用于大端或小端字节。“double H”意味着两个无符号的短整数应该被解压缩(每个2字节),然后是由16s定义的16个字符字符串(16个字节),因此tcpHeader是一个20个字节字符串,tcp_hdr存储一个(int,int,string)元组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27439278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档