Scapy

2013-04-29 21 views
6

ben basitleştirilmiş bir örnekle sorunumu göstermek çalışacağım birden konuları kullanırken paketleri dinleyen başarısız olur.Scapy

from scapy.all import * 

m_iface = "wlan0" 
m_dst = "192.168.0.1" 

def print_summary(pkt): 
    print pkt.summary() 

def plain_sniff(): 
    sniff(iface = m_iface, count = 10, filter = "icmp and src {0}".format(m_dst), prn = print_summary) 

Bu algılayıcı gayet güzel çalışıyor ve ben çıktı alın::

ardından çok basit (tek dişli) paket dinleyicisi (ICMP) 'dir

WARNING: No route found for IPv6 destination :: (no default route?) 
Ether/IP/ICMP 192.168.0.1 > 192.168.0.9 echo-reply 0/Raw 
Ether/IP/ICMP 192.168.0.1 > 192.168.0.9 echo-reply 0/Raw 
Ether/IP/ICMP 192.168.0.1 > 192.168.0.9 echo-reply 0/Raw 
... 

Sonra, ben ayrı oluşturmak paket koklamak için iş parçacığı ve algılanan paketler arasında algılayıcı iş parçacığı ve ana iş parçacığı arasında iletişim kurmak için bir Kuyruk kullanın:

Bu algılayıcı da gayet iyi çalışıyor ve yukarıdaki gibi aynı çıktıyı olsun. Sonra

def threaded_sniff_with_send(): 
    q = Queue() 
    sniffer = Thread(target = threaded_sniff_target, args = (q,)) 
    sniffer.daemon = True 
    sniffer.start() 
    while (not m_finished): 
    send(IP(dst = m_dst)/ICMP()) # Here 
    try: 
     pkt = q.get(timeout = 1) 
     print_summary(pkt) 
    except Empty: 
     pass 

ben tuhaf çıkış aşağıdaki (filtre görünmüyor olsun: aşağıdaki gibi paket sıradan okur arasındaki o send() işlevini kullanır, böylece Ancak, ne zaman ana konuyu birazcık değiştirmek iş):

WARNING: No route found for IPv6 destination :: (no default route?) 
Sent 1 packets. 
Ether/ARP who has 192.168.0.1 says 192.168.0.9 
Sent 1 packets. 
Ether/ARP is at a0:21:b7:1a:7a:db says 192.168.0.1 
Sent 1 packets. 
Ether/IP/ICMP 192.168.0.9 > 192.168.0.1 echo-request 0 
Sent 1 packets. 
Ether/IP/ICMP 192.168.0.1 > 192.168.0.9 echo-reply 0 
... 

üç koklayıcıları için komut dosyası here indirilebilir.

Benim şu anki sistem yapılandırması aşağıdaki gibidir:

Python: 2.7.3 
Scapy: 2.2.0 
OS: Fedora 18 

İlginçtir, her üç koklayıcıların benim eski bilgisayarda iyi çalışır:

Python: 2.6.4 
Scapy: 2.0.0.10 (beta) 
OS: Fedora 13 

Öncelikle ben Scapy/Python versiyonları olabileceğini düşündüm . Ama aynı sürümleri yeni bilgisayarıma yüklediğimde bile, davranış devam ediyordu.

Bu SO için uygun bir soru (Scapy bir hata raporu olabilir?) Ise tamamen emin değilim. Lütfen bana bu durumda özür dilerim.

+0

Bilinen bir hataya benziyor: http://trac.secdev.org/scapy/ticket/747 –

+0

@ChathurangaChandrasekara: Karşılaştığım konu çok iş parçacığı ile ilgilidir. Kod, iş parçacığı olmadan gayet iyi çalışıyor. Bu @AsiriRathnayake –

+0

ağ arabirim o arayüzüne bağlanma edebilecek tek kaynak "Premiscious modunda" ve biter gerçeği ile ilgili bir şey var olmaz? Değilse, sıra yerine python 'threading' kütüphanesini kullanmayı denediniz mi? Kuyruk sisteminin nasıl çalıştığından tam olarak emin değilim, ama 'diş çekme' ile en azından ne yaptığınızı daha fazla kontrol edersiniz ve biraz daha etrafta gezinebilirsiniz. – Torxed

cevap

6

Bunun temel nedeni, kaynak kilitlerinin büyük olasılıkla. Scapy'nin sniff() işlevi muhtemelen paketleri algılayabilmesi için düşük seviyeli ağ kaynaklarına kilitlenmelidir.

Eğer Scapy bunu yapması gereken zamanı elde etmesini sağlamak edeceğiz (sniffer iplik başlangıç ​​sonra) iki konuları gecikiyor.

Bu sonuca nasıl geldiğini görmek için, yorum bölümünde yukarıdaki tartışmaya bakın. Gl Asiri Rathnayake :)

+0

Buna baktığınız için teşekkür ederiz. Bu benim de özgün sorunumu çözdü (ki bu daha karmaşık bir iletişim senaryosu). Scapy'nin içeriğinde muhtemelen bir iplik güvenliği sorunu var, umarım Scapy'den birisi bu yazıya rastlar :) –

+1

Yw. Bunun için zaman alırsam, bir posta listesine bir not gönderirim ve birisi umarım bu notu alır :) – Torxed