2012-01-13 2 views
9

dpkt를 사용하여 이더넷에서 패킷을 캡처하는 파이썬 스크립트가 있는데, 어떤 패킷이 tcp이고 어떤 것이 패킷인지 구분하는 방법은 무엇입니까? udp.python/dpkt : 패킷이 tcp 패킷인지 또는 udp 패킷인지 확인하십시오.

결국 나는 시간 간격 동안 설정된 각 tcp 연결에 대한 패킷 목록을 갖고 싶습니다.

내 코드는 다음과 같습니다

import dpkt 
import pcapy 
cap=pcap.open_live('eth0',100000,1,0) 
(header,payload)=cap.next() 
while header: 
    eth=dpkt.ethernet.Ethernet(str(payload)) 
    ip=eth.data 
    tcp=ip.data 
    # i need to know whether it is a tcp or a udp packet here!!! 
    (header,payload)=cap.next() 
+0

답변을 찾았으니 다른 사람들을 위해 게시 할 수도 있습니다. 다음 코드는 작업을 수행합니다 IP = eth.data 경우 (IP .__ DICT) .has_key ('TCP') : 이 TCP 패킷은 #then ... – ConfusedAboutCPP

답변

6

IP 헤더 필드 프로토콜이 포함되어 있습니다. dpkt는이 값을 얻을 수 있도록 허용해야하며, IP를 기반으로하는 것이 무엇인지 짐작할 수 있습니다. 유효한 프로토콜 번호 목록은 http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml입니다. TCP는 6

편집하는 동안 UDP 17과 같다 : 나는이 문제를 확인했습니다 내가 언급 한 바와 같이 때 dpkg는 IP의 프로토콜 필드에 액세스 할 수 p 특성을 제공한다. 그래서 다시 확인하실 수 있습니다. 또한 패킷을 자동으로 파싱하고 UDP 또는 TCP와 같은 상위 프로토콜을 나타내는 클래스의 인스턴스에 data 속성을 설정합니다. 따라서 data 속성의 유형을 확인할 수 있으며이 프로토콜을 인식 할 수 있습니다.

from dpkt.ip import IP, IP_PROTO_UDP 
from dpkt.udp import UDP 
ip = IP('E\x00\x00"\x00\x00\x00\[email protected]\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar') 
#if ip.p == IP_PROTO_UDP: # checking for protocol field in ip header 
if type(ip.data) == UDP : # checking of type of data that was recognized by dpkg 
    udp = ip.data 
    print udp.sport 
else: 
    print "Not UDP" 
6

dpkt를 사용하여 이더넷 어댑터 eth0의 패킷을 포착하고, IP ​​의 UDP TCP 패킷 사이를 구별 Python 스크립트.

import dpkt 
import pcapy 

cap=pcapy.open_live('eth0',100000,1,0) 
(header,payload)=cap.next() 

while header: 
    eth=dpkt.ethernet.Ethernet(str(payload)) 

    # Check whether IP packets: to consider only IP packets 
    if eth.type!=dpkt.ethernet.ETH_TYPE_IP: 
      continue 
      # Skip if it is not an IP packet 
    ip=eth.data 
    if ip.p==dpkt.ip.IP_PROTO_TCP: # Check for TCP packets 
      TCP=ip.data 
      # ADD TCP packets Analysis code here 
    elif ip.p==dpkt.ip.IP_PROTO_UDP: # Check for UDP packets 
      UDP=ip.data 
      # UDP packets Analysis code here 

    (header,payload)=cap.next() 
관련 문제