2015-02-03 4 views
6

scapypython을 사용하여 실시간 트래픽을 스니핑합니다.스니핑 된 각 패킷에서 동작을 트리거하는 스니핑 패킷 스니퍼

capture=sniff(iface="<My Interface>", filter="tcp") 

그러나 각 패킷을 스 니프하여 나중에 처리 할 수있는 capture 목록에 추가합니다.

나는 패킷을 처리하고 패킷의 몇 가지 필드를 표시하고자 할 때 즉시 스니핑을한다. 즉 패킷을 스니핑하면 해당 패킷을 분석 할 수있는 기능을 트리거합니다. 그리고 이것은 몇 패킷 동안 계속됩니다.

캡쳐 된 패킷 목록과 함께 사용할 준비가되었습니다. 하지만 각 라이브 패킷에 사용할 수는 없습니다.

어떻게 달성할까요? scapy으로 가능합니까 아니면 다른 패키지를 설치해야합니까?

답변

7

매개 변수는 아래의 코드처럼한다 :

from scapy.all import * 

def pkt_callback(pkt): 
    pkt.show() # debug statement 

sniff(iface="<My Interface>", prn=pkt_callback, filter="tcp", store=0) 

store=0는 패킷을 수신 저장하고 prnpktpkt_callback에를 보내라고하지 말한다.

하나의 작업이 필요한 경우가 Yoel 바와 같이

Source.

, lambda이 경우처럼 대신 새로운 기능 prn 함께 사용될 수

sniff(iface="<My Interface>", prn = lambda x: x.show(), filter="tcp", store=0) 
+0

'store = 0' 설정에 대한 귀하의 주장과 관련하여 [이 답변] (http://stackoverflow.com/a/28296641/3903832)을 읽어보십시오. – Yoel

+0

@ Yoel 프로그램 실행에 영향을 미치지 않습니다. 그러나 각 패킷을리스트 ('store = 1')에 추가하는 것은 여분의 오버 헤드이며'prn'으로 각각의 패킷을 처리하고 있다고 생각하지 마십시오. 우리는 정말로 그 패킷을 저장해야합니까? – RatDon

+0

원래 대답 한 내용이 아닙니다. 나는'store = 0'을 설정하는 것이 공간과 시간의 효율성을 약간 향상시킬 것이라는 것에 동의하며, 실제로 [내 대답] (http://stackoverflow.com/a/28296641/3903832)에 대한 의견에서 주장했다. 반대말. 오래 전에 게시 된 내 대답과 그 주석이 이미 위의 모든 내용을 언급 한 이후로 토론에 추가되는 내용을 볼 수는 없지만 답변을 편집 했으므로 올바르게되었습니다. – Yoel

5

이 작업은 sniff 함수의 prn 인수를 사용하여 수행 할 수 있습니다. Scapy의 자습서에는 간단한 예제 here이 있습니다. Scapy의 지정 official API documentation :

sniff(prn=None, lfilter=None, count=0, store=1, offline=None, L2socket=None, timeout=None)

...
prn는 : 함수는 각각의 패킷에 적용한다. 무언가가 반환되면 표시됩니다. 예를 들어 prn = lambda x: x.summary()을 사용할 수 있습니다.
...


편집 : store 인수가 prn 콜백 0로 설정해야한다는
The accepted answer 요구가 호출된다. 그러나 store=0 설정은 그러한 효과가 없습니다. Scapy's own examplesstore=0으로 설정하지 않으며 official API documentation에는 이러한 요구 사항이 언급되어 있지 않습니다. 실제로 Scapy의 소스 코드를 검사하면 storeprn 인수 사이에 아무런 연결이 없음을 알 수 있습니다. 관련 코드 블록의 발췌 부분은 다음과 같습니다.

... 
if store: 
    lst.append(p) 
c += 1 
if prn: 
    r = prn(p) 
    if r is not None: 
     print r 
... 

몇 가지 간단한 테스트 사례를 실행하면이 결과도 지원됩니다. 스 니프 함수에

+0

감사. 나는 이미 그것을 찾았고'store' 매개 변수를'0'으로 설정했습니다. 라이브 트래픽을 처리하는 것 같습니다. 그러나 시간이 많이 걸리고 따라서 다른 방법으로 시도해 보겠습니다. 어쨌든 감사합니다. – RatDon

+0

오, 놀랍습니다. 나는 'store = 0'을 설정하는 것이 더 효율적일 것이라고 기대한다. 이거 어디서 읽었 니? – Yoel