2016-12-26 4 views
0

Я пытаюсь использовать функцию sniff(), которая обеспечивает scapy но он поднимает следующую ошибку:Scapy сопение() функция не работает без видимых причин

Traceback (most recent call last): 

    File "TestCode.py", line 54, in <module> 
    packets = getMessege() 

    File "TestCode.py", line 45, in getMessege 
    return sniff(count=getLen(), lfilter=filterFrom) 

    File "C:\Heights\PortableApps\PortablePython2.7.6.1\App\lib\site-packages\scapy\sendrecv.py", line 575, in sniff 

    sel = select([s],[],[],remain) 

select.error: (10038, 'An operation was attempted on something that is not a socket') 

Вот код (FromGlobal является кортежем, что содержит IP-адрес и порт отправителя):

def getLen(): 
    while True: 
     length, LenFrom = sock.recvfrom(1024) 
     try: 
      IntLen = int(length) 
     except: 
      pass 
     else: 
      if LenFrom == FromGlobal: 
       return IntLen 

def filterFrom(pck): 
    try: 
     return pck[IP].src == FromGlobal[0] and pck[UDP].sport == FromGlobal[1] 
    except: 
     return False 

def getMessege(): # TODO This needs to return only the messege and port 
    return sniff(count=getLen(), lfilter=filterFrom) 

packets = getMessege() 
print packets.show() 

странная часть что если я пытаюсь это сделать так:

def func1(): 
    return int('1') 

def lfilter(pack): 
    return TCP in pack and pack[IP].src != '8.8.8.8' 

def func(): 
    return sniff(count=func1(), lfilter=lfilter) 

var = func() 
print var.show() 

он работает отлично. Если бы кто-то мог указать на разницу между ними, это очень помогло бы.

Я использую WinPcap 4.1.3 и scapy 2.x.

+0

вы можете отделить 'getLen()' часть проблемы? в 'getMessage' do' l = getLen() 'возможно даже печатать' l' и вызывать 'sniff (count = l, lfilter = filterFrom)', потому что вызов вашего кода без getLen() не реплицирует проблему, и мы не можем использовать getLen поскольку он использует существующий сокет. – DorElias

ответ

0

Ну, Решил сам. по-видимому, если вы:

from scapy.all import * 
from scapy.layers.inet import * 

функция нюхать не работает так делают только

from scapy.all import * 
Смежные вопросы