2012-01-13 18 views
9

मेरे पास एक पाइथन स्क्रिप्ट है जो ईपीरनेट पर पैकेट को डीपीटीटी का उपयोग करके कैप्चर करती है, लेकिन मैं किस पैकेट को टीसीपी के बीच अंतर करता हूं और कौन सा है यूडीपी।पायथन/डीपीकेटी: पता लगाएं कि पैकेट एक टीसीपी पैकेट या udp पैकेट है,

आखिरकार मैं समय अंतराल के दौरान स्थापित प्रत्येक टीसीपी कनेक्शन के लिए पैकेट की एक सूची रखना चाहता हूं।

मेरी कोड है:

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

मुझे जवाब मिला, इसलिए मैं इसे दूसरों के लिए भी पोस्ट कर सकता हूं। निम्नलिखित कोड काम करता है: आईपी = eth.data अगर (आईपी .__ dict) .has_key ('टीसीपी'): #then यह एक टीसीपी पैकेट है ... – ConfusedAboutCPP

उत्तर

6

IP हेडर क्षेत्र प्रोटोकॉल में शामिल है। dpkt आपको इस मान को प्राप्त करने और इसका उपयोग करने की अनुमति दे सकता है, आप अनुमान लगा सकते हैं कि आईपी के शीर्ष पर क्या है। वैध प्रोटोकॉल संख्या http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml की एक सूची यहां दी गई है। यूडीपी 17 के बराबर है, जबकि टीसीपी 6.

संपादित है: मैं इस मुद्दे को जाँच कर ली है और जैसा कि मैंने उल्लेख किया dpkg आईपी के प्रोटोकॉल क्षेत्र तक पहुँचने के लिए p गुण प्रदान करते हैं। तो आप इसे फिर से जांच सकते हैं। लेकिन यह स्वचालित रूप से पैकेट को पार्स करता है और 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

Python स्क्रिप्ट है जो ईथरनेट एडाप्टर eth0dpkt के प्रयोग पर पैकेट कैप्चर करता है, और टीसीपी के बीच और यूडीपी आईपी के पैकेट अलग करती है।

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() 
संबंधित मुद्दे