Python 和 libpcap。查找数据包的源mac地址

发布于 2024-09-04 17:07:45 字数 1243 浏览 11 评论 0原文

我正在编写 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼泪也成诗 2024-09-11 17:07:45

谷歌“以太网帧格式”。数据包的前 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.

放我走吧 2024-09-11 17:07:45

天哪,伙计,你为什么要这样做?使用 Scapy 代替。

Oh my god man, why are you doing this ? Use Scapy instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文