2012-01-13 20 views
9

Tengo un script de python que captura los paquetes en el ethernet usando dpkt, pero ¿cómo distingo entre qué paquetes son tcp y cuáles son para udp.python/dpkt: Averigüe si el paquete es un paquete tcp o un paquete udp,

Eventualmente me gustaría tener una lista de paquetes para cada conexión de tcp que se estableció durante el intervalo de tiempo.

mi código es:

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

Encontré la respuesta así que también podría publicarla aquí para otros. El siguiente código hace el trabajo: ip = eth.data si (ip .__ dict) .has_key ('tcp'): #then este es un paquete TCP ... – ConfusedAboutCPP

Respuesta

6

cabecera IP contiene el protocolo de campo. dpkt debería permitirle obtener este valor y al usarlo puede adivinar qué hay encima de IP. Aquí hay una lista de protocolos válidos números http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml. UDP es igual a 17, mientras que TCP es 6.

Editar: He comprobado este problema y como he mencionado dpkg proporcionar p propiedades de acceso a campo de protocolo de IP. Entonces puedes verificarlo. Pero también analiza automáticamente el paquete y establece la propiedad data en la instancia de la clase que representa el protocolo superior, como UDP o TCP. Entonces puede verificar el tipo de propiedad data y reconoce este protocolo.

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

un script en Python que captura los paquetes en el adaptador de Ethernet utilizando eth0dpkt, y diferencia entre TCP y UDP paquetes del IP .

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() 
Cuestiones relacionadas