2014-01-14 2 views
-2

Я пытаюсь написать программу для sniff исходящего ICMP & TCP-пакетов запроса с помощью сокета python2.7 Но я просто знаю, как обнюхивать входящие пакеты на порт.Как использовать сокет python для обнюхивания запроса ICMP и TCP

Программа может быть выполнена для обнюхивания любых исходящих ICMP & TCP-пакетов суперпользователем на Llnux. Как я могу это сделать?

+0

Что вы пробовали? Какую часть вы застряли? Вы хотите использовать 'libpcap' или явные исходные сокеты или другую альтернативу? – abarnert

+0

Я начинаю питон. Я имею в виду пример сокета, чтобы практиковать сетевое программирование. образец импорта, создать объект сокета, установить сокет и порт связывания для прослушивания входящих пакетов. Но эта программа просто может обнюхать порт привязки сокета. Итак, я путаю, как обнюхивать любой исходящий пакет. –

+0

Ну, вам нужно узнать о сырых сокетах (и, возможно, беспорядочном режиме). Прочтите справочные страницы или найдите учебник. Играйте с Wireshark и прочитайте его документацию. Возможно, напишите некоторые основные сценарии, чтобы играть с сырыми сокетами легко. Тогда вы, вероятно, захотите использовать 'libpcap' с одним из своих различных связок Python для вашей реальной программы. – abarnert

ответ

0

pycap

(пример со страницы проекта)

>>> import dpkt, pcap 
>>> pc = pcap.pcap() 
>>> pc.setfilter('icmp') 
>>> for ts, pkt in pc: 
...  print `dpkt.ethernet.Ethernet(pkt)` 
... 
Ethernet(src='\x00\x03G\xb2M\xe4', dst='\x00\x03G\x06h\x18', data=IP(src='\n\x00\x01\x1c', dst='\n\x00\x01\x10', sum=39799, len=60, p=1, ttl=128, id=35102, data=ICMP(sum=24667, type=8, data=Echo(id=512, seq=60160, data='abcdefghijklmnopqrstuvwabcdefghi')))) 
Ethernet(src='\x00\x03G\x06h\x18', dst='\x00\x03G\xb2M\xe4', data=IP(src='\n\x00\x01\x10', dst='\n\x00\x01\x1c', sum=43697, len=60, p=1, ttl=255, id=64227, data=ICMP(sum=26715, data=Echo(id=512, seq=60160, data='abcdefghijklmnopqrstuvwabcdefghi')))) 
^CTraceback (most recent call last): 
    File '<stdin>', line 1, in ? 
    File 'pcap.pyx', line 298, in pcap.pcap.__next__ 
KeyboardInterrupt 
>>> 
>>> pc.stats() 
(4851, 0, 0) 
Смежные вопросы