• Publicidad

Problemas con sniffer

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problemas con sniffer

Notapor The XC3LL » 2013-03-24 15:14 @676

Saludos.

Estoy intentando programarme una herramienta que esnife el tráfico HTTP de mi navegador, para después trabajar con lo que intercepte. Por ahora estoy intentando probar algún método que me permita sacar únicamente las cabeceras HTTP (y el contenido POST si hubiera mandado alguno) y que no me muestre el documento HTML o el contenido en general que viene en la respuesta del servidor. He intentado hacerlo de mil formas, pero no he conseguido ningún resultado satisfactorio. Lo más cerca que he estado ha sido haciendo una chapuza (porque no tiene otro nombre, es una chapuza) que a veces funciona, y a veces no. Aquí dejo lo que he estado intentado hacer:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3.     use strict;
  4.     use Net::PcapUtils;
  5.     use NetPacket::Ethernet;
  6.     use NetPacket::IP;
  7.     use NetPacket::TCP;
  8.     use Data::HexDump;                 # Recordar: soltar volcado en Hex para otras herramientas
  9.     use Term::ANSIColor;
  10.  
  11.     unless ( $ARGV[0] ) { &error_param; }
  12.  
  13.     my $option = $ARGV[0];
  14.     if ( $option eq "-h" ) { &help; }
  15.  
  16.     # Recordar: meter filtros al gusto mediante argumentos
  17.     # Recordar: optimizar la selección de opciones, y añadir las que había pensado
  18.     my %filter = (
  19.         "-d" => "dst port 80",         # Cabeceras que envía el navegador
  20.         "-s" => "src port 80",         # Cabeceras que envía el servidor
  21.         "-b" => "port 80"              # Ambas cabeceras
  22.  
  23.     );
  24.  
  25.     ETIQUETA:                          # Esto es una guarrada, pero no consigo hacerlo de otra forma
  26.     print "\n\n";
  27.     Net::PcapUtils::loop( \&process_pkt, SNAPLEN => 1000, FILTER => $filter{$option} );
  28.  
  29.     # Aquí metemos la subrutina para leer los paquetes y limpiarlos
  30.     sub process_pkt {
  31.         my ( $arg, $hdr, $pkt ) = @_;
  32.  
  33.         my $eth_obj = NetPacket::Ethernet->decode($pkt);
  34.         if ( $eth_obj->{type} == 0x0800 ) {
  35.             my $ip_obj = NetPacket::IP->decode( $eth_obj->{data} );
  36.             if ( $ip_obj->{proto} == 6 ) {
  37.                 my $tcp_obj = NetPacket::TCP->decode( $ip_obj->{data} );
  38.                 if ( $tcp_obj->{data} ) {
  39.                     $tcp_obj->{data} =~ s/\r\n\r\n/\nxxxx/g;
  40.                     my @todo = split( /\r\n/, $tcp_obj->{data} );
  41.                     foreach my $line (@todo) {
  42.                         if ( $line =~ "xxxx" ) { goto ETIQUETA; }
  43.                         print "\n$line";
  44.  
  45.                         # Esto es otra guarrada, pero es que no consigo hacerlo de ninguna
  46.                         # otra manera. Y aun así a veces falla
  47.                     }
  48.                 }
  49.             }
  50.         }
  51.     }
  52.  
  53.     sub error_param {
  54.         use Term::ANSIColor qw(:constants);
  55.         local $Term::ANSIColor::AUTORESET = 1;
  56.         print RED "\n[+]";
  57.         print "Necesitas añadir una opción\nUso: perl 0verSniff.pl <opción>\n\n";
  58.         exit;
  59.     }
  60.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿Alguien conoce alguna forma para poder extraer únicamente las cabeceras (tanto enviadas por el cliente como por el servidor -y el contenido en POST si lo hubiera-)?
The XC3LL
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-03-24 15:04 @669

Publicidad

Re: Problemas con sniffer

Notapor The XC3LL » 2013-03-26 10:18 @471

Siento el doble post, pero ya encontré una forma, y quisiera dejarla por aquí por si a algún otro usuario le sirve en un futuro. En CPAN he encontrado un módulo llamado "Sniffer::HTTP", que facilita bastante el trabajo. Dentro de la documentación del módulo encontramos un ejemplo llamado "Live-http-headers.pl" que hace exáctamente lo que yo estaba intentando: mostrar en tiempo real las cabeceras HTTP. El código de "Live-http-headers.pl" es este (lo dejo, como bien dije, por si a alguien le sirve en un futuro):


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use lib 'lib';
  4. use Net::Pcap;
  5. use Sniffer::HTTP;
  6. use Net::Pcap::FindDevice;
  7. use Data::Dumper;
  8.  
  9. =head1 NAME
  10.  
  11. live-http-headers.pl - Dump the headers of HTTP connections as they happen
  12.  
  13. =head1 SYNTAX
  14.  
  15.   live-http-headers.pl INTERFACE
  16.  
  17. C<INTERFACE> is the name of the interface, or on Windows, a substring
  18. of the description of the interface. If none is given, the program
  19. defaults to C<any> on Linux and dies on Windows.
  20.  
  21. =cut
  22.  
  23. my $VERBOSE = 0;
  24.  
  25. my $device = $ARGV[0];
  26.  
  27.  
  28. if ($^O =~ /MSWin32|cygwin/ && $device) {
  29.  $device = qr/$device/i
  30. };
  31.  
  32. my $sniffer = Sniffer::HTTP->new(
  33.   callbacks => {
  34.       request  => sub { my ($req,$conn) = @_; print ">>>\n", $req->as_string },
  35.       response => sub { my ($res,$req,$conn) = @_; print "<<<\n", $res->status_line,"\n",$res->headers->as_string },
  36.       log      => sub { print $_[0] if $VERBOSE },
  37.       tcp_log  => sub { print $_[0] if $VERBOSE > 1 },
  38.   }
  39. )->run( $device, $ARGV[1] );
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Un saludo a la comunidad.
The XC3LL
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-03-24 15:04 @669

Re: Problemas con sniffer

Notapor explorer » 2013-03-26 10:25 @476

Bienvenido a los foros de Perl en Español, The XC3LL.

Yo también estuve buscando por CPAN, el otro día, pero no encontré nada. Me sonaba que había algo para manejar la biblioteca pcap, pero aparte de los módulos que publicaste en el primer mensaje, no vi más. Se ve que no busqué bien :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 34 invitados