![]()
import socket
import struct
import textwrap
# struct模块来解决bytes和其他二进制数据类型的转换。
# Unpack ethernet frame
def ethernet_frame(data):
dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14])
# 将前14位拆分成 6位, 6位, 2 位
# 首位为!,即为大端模式标准对齐方式(network)
# 默认为@,即使用本机的字符顺序(大端or小端)
# h 代表C struct中的short类型,占2位
return get_mac_addr(dest_mac), get_mac_addr(src_mac), socket.htons(protp), data[14:]
# socket.htons(x)
# Convert 16-bit positive integers from host to network byte order.
# On machines where the host byte order is the same as network byte order, this is a no-op;
# otherwise, it performs a 2-byte swap operation.