Python 和 libpcap。查找数据包的源mac地址
我正在编写 python 程序来使用 pcap 构建 mac 地址缓存。但是 python 的 pcap 模块没有好的文档。我找到了此页面 http://pylibpcap.sourceforge.net/ 以及代码示例,它工作正常。
任何人都可以修改此示例以使其能够显示每个数据包的源 mac 地址吗?或者指出我可以阅读的文档...
已更新
这是一个代码部分,其中删除了有关 mac 地址的信息。
def print_packet(pktlen, data, timestamp):
if not data:
return
if data[12:14]=='\x08\x00':
decoded=decode_ip_packet(data[14:])
print '\n%s.%f %s > %s' % (time.strftime('%H:%M',
time.localtime(timestamp)),
timestamp % 60,
decoded['source_address'],
decoded['destination_address'])
for key in ['version', 'header_len', 'tos', 'total_len', 'id',
'flags', 'fragment_offset', 'ttl']:
print ' %s: %d' % (key, decoded[key])
print ' protocol: %s' % protocols[decoded['protocol']]
print ' header checksum: %d' % decoded['checksum']
print ' data:'
dumphex(decoded['data'])
数据中的前 14 个八位字节是目标、源 mac 地址和以太类型。
decoded=decode_ip_packet(data[14:])
我需要解析它们才能获取此信息。任务完成。
I'm writing python program to build mac-address cache using pcap. But pcap module for python has no good documentation. I have found this page http://pylibpcap.sourceforge.net/ with code example and it works fine.
Can anybody modify this example to make it able to show the source mac-address for each packet? Or point me to the documentation where I can read about it ...
updated
Here is a code part where information about mac addresses were cut.
def print_packet(pktlen, data, timestamp):
if not data:
return
if data[12:14]=='\x08\x00':
decoded=decode_ip_packet(data[14:])
print '\n%s.%f %s > %s' % (time.strftime('%H:%M',
time.localtime(timestamp)),
timestamp % 60,
decoded['source_address'],
decoded['destination_address'])
for key in ['version', 'header_len', 'tos', 'total_len', 'id',
'flags', 'fragment_offset', 'ttl']:
print ' %s: %d' % (key, decoded[key])
print ' protocol: %s' % protocols[decoded['protocol']]
print ' header checksum: %d' % decoded['checksum']
print ' data:'
dumphex(decoded['data'])
First 14 octets in data are destination, source mac-addr and ether type.
decoded=decode_ip_packet(data[14:])
I need to parse them to get this info. Task is done.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
谷歌“以太网帧格式”。数据包的前 6 个八位字节是目标 MAC 地址,紧随其后的是源 MAC 地址的 6 个八位字节。
这个维基百科页面可能会有所帮助。
Google "Ethernet frame formats". The first 6 octets of a packet is the destination MAC address, which is immediately followed by the 6 octets of source MAC address.
This Wikipedia page may help.
天哪,伙计,你为什么要这样做?使用 Scapy 代替。
Oh my god man, why are you doing this ? Use Scapy instead.