Python и libpcap.найти исходный mac-адрес пакета - PullRequest
2 голосов
/ 10 июня 2010

Я пишу программу на Python для построения кеша MAC-адресов с использованием pcap. Но модуль pcap для python не имеет хорошей документации. Я нашел эту страницу 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-addr и тип ether.

    decoded=decode_ip_packet(data[14:])

Мне нужно разобрать их, чтобы получить эту информацию. Задача выполнена.

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

Google "Фреймовые форматы Ethernet". Первые 6 октетов пакета - это MAC-адрес назначения, за которым сразу же следуют 6 октетов исходного MAC-адреса.

Эта страница Википедии может помочь.

2 голосов
/ 10 июня 2010

Боже мой, почему ты это делаешь? Вместо этого используйте Scapy .

...