2014-11-27 3 views
2

실제로 파이썬으로 패킷을 스니핑하려고합니다 (pypcap 및 dpkt 사용). OS X에서 pypcap과 dpkt를 사용하는 파이썬 스니퍼

나는 시도 다음

import dpkt, pcap 
pc = pcap.pcap()  # construct pcap object 
pc.setfilter('src host X.X.X.X or dst host X.X.X.X') 
for timestamp, packet in pc: 
    print dpkt.ethernet.Ethernet(packet) 

하지만 스크립트를 실행할 때 아무것도 내가 뭔가를 놓친 건가 ... 어떻게하지? OS X 요세미티 (10.10)에 파이썬 2.7 사용

답변

0

, 그것은 구문 분석에 대한 더 PCAP 없습니다.

내가 가지고있는 pcap 디렉토리에서 glob을 사용하여 스크립트를 실행했고 네트워크에서 IP를 하나 교체했습니다. 작동하는 것처럼 보였습니다. pypcap과 dpkt를 설치하셨습니까?

정확하게 내가 당신의 스크립트로했던 것입니다.

import dpkt, pcap, glob 
for i in glob.glob("/pcap/*.pcap"): 
    pc = pcap.pcap(i) 
    pc.setfilter('src host 192.168.1.140 or dst host 192.168.1.140') 
    for timestamp, packet in pc: 
     print dpkt.ethernet.Ethernet(packet) 

많은 것을 인쇄했습니다.

+0

2 번째 줄을'pc = pcap.pcap ('pcap/capture.pcap')'(내 pcap 캡쳐 경로)로 바꾸면 터미널에 결과가 표시되므로 경로를 정의하지 않았기 때문에 잘못되었습니다. pcap 파일. 하지만 내가 원하는 것은 패킷의 스트림을 인쇄하는 것입니다. pypcap lib를 사용하여 어떻게해야합니까? 가능한가? – Kuaaaly

+0

패킷을 포장하는 방식 때문에 내가 잘못 본 것이 아니라면 전체 패킷을 인쇄하면 읽을 수없는 데이터가 많이 생깁니다.원하는 값을 읽고 읽고 변환 할 수 있어야합니다. – mdandr

+0

네, 사실입니다 : 패킷을 읽을 수 없습니다. 내가해야할 일은 정의 된 src ip에서 TCP 페이로드를 추출하여이를 deserialize하는 것입니다. 사실, 나는 pypcap과 dpkt를 포기했지만 당신의 대답은 내 문제를 해결했지만 나는 scapy를 사용하기 시작했다. – Kuaaaly

0

당신은 Scapy을 확인해야합니다. 그것의 강력한 네트워킹 도구는 interactivly 사용할 수 있습니다. 파이썬으로 작성되었으므로 스크립트에서도 사용할 수 있습니다. scapy에서

은 (하지만 당신은 쉽게뿐만 아니라 필터를 추가 할 수 있습니다)로서의 쉽게 : 당신이 pcap.pcap()에서 파일의 경로를 배치하지 않은 경우

sniff(iface='eth0') 
+0

나는 그것을 조사 할 것이지만 여전히 나의 이전 문제에 대한 해결책을 찾고있다. – Kuaaaly

0

아무 것도 코드에서 점프하지 않으므로 단지 네트워크인지 궁금합니다.

IP 주소를 다시 확인하고 트래픽을 볼 수 있는지 확인하기 위해 tcpdump를 정상적으로 실행할 수 있습니까? 이

$ sudo tcpdump -i en1 "src host 10.0.0.2 or dst host 10.0.0.2" 
+0

필자는 파이썬 스크립트와 동일한 필터를 사용하여'sudo tcpdump -i en0'을 실행하고 필터에 IP를 요청하면 터미널에 많은 패킷이 표시됩니다. 그래서 tcpdump가 실행됩니다. – Kuaaaly

8

문제와 같은

tcpdump를 위해 뭔가 오래된 그러나이 충돌 할 수 새로운 사람들을위한 것입니다. GitHub의 '체인'프로젝트는 면책 조항 (일 정확히 이런 종류의 pypcap 및 dpkt를 모두 사용 : 나는 모든 세 가지 프로젝트 : 참여 해요 https://github.com/SuperCowPowers/chains

pypcap의
  • 체인/소스/packet_streamer.py (코드 표시 사용

    : 단지 pypcap를 사용하고자하는 사람들을 위해

(코드는 패킷 분석을위한 dpkt의 사용을 보여주는))

  • 체인/링크/packet_meta.py을 '스니핑'에 대한/dpkt 여기 작업 코드입니다
    import pcap 
    import dpkt 
    
    sniffer = pcap.pcap(name=None, promisc=True, immediate=True) 
    for timestamp, raw_buf in sniffer: 
        output = {} 
    
        # Unpack the Ethernet frame (mac src/dst, ethertype) 
        eth = dpkt.ethernet.Ethernet(raw_buf) 
        output['eth'] = {'src': eth.src, 'dst': eth.dst, 'type':eth.type} 
    
        # It this an IP packet? 
        if not isinstance(eth.data, dpkt.ip.IP): 
         print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__ 
         continue 
    
        # Grab ip packet 
        packet = eth.data 
    
        # Pull out fragment information 
        df = bool(packet.off & dpkt.ip.IP_DF) 
        mf = bool(packet.off & dpkt.ip.IP_MF) 
        offset = packet.off & dpkt.ip.IP_OFFMASK 
    
        # Pulling out src, dst, length, fragment info, TTL, checksum and Protocol 
        output['ip'] = {'src':packet.src, 'dst':packet.dst, 'p': packet.p, 
            'len':packet.len, 'ttl':packet.ttl, 
            'df':df, 'mf': mf, 'offset': offset, 
            'checksum': packet.sum} 
        print output 
    
  • 관련 문제