Net::RawSock - Perl module to send network raw IP datagrams Stephane Aubert aka Kotao HSC security research labs Hervé Schauer Consultants Copyright (c) 2001 Stephane Aubert. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Description =========== Net::RawSock provides a base function to send raw IP datagrams from Perl. The raw IP datagam is packed into a buffer and written on the network layer with the write_ip() function. Download ======== Main site: Howto install ------------- % perl Makefile.PL % make # make install Howto test ---------- # ./demo.pl You should see : xor [root] ~# tcpdump -lnx -s 1500 -i lo tcpdump: listening on lo 21:22:39.800446 127.0.0.1.33842 > 127.0.0.1.80: S 2877615549:2877615549(0) win 32767 (DF) [tos 0x10] 4510 003c ccce 4000 4006 6fdb 7f00 0001 7f00 0001 8432 0050 ab84 edbd 0000 0000 a002 7fff 4fdc 0000 0204 400c 0402 080a 0099 2173 0000 0000 0103 0300 Howto use --------- #! /usr/bin/perl use Net::RawSock; ## $pkt comes from: tcpdump -lnx -s 1500 -i lo my $pkt = "\x45\x10\x00\x3c\xcc\xce\x40\x00\x40\x06\x6f\xdb\x7f\x00\x00\x01". "\x7f\x00\x00\x01\x84\x32\x00\x50\xab\x84\xed\xbd\x00\x00\x00\x00". "\xa0\x02\x7f\xff\x4f\xdc\x00\x00\x02\x04\x40\x0c\x04\x02\x08\x0a". "\x00\x99\x21\x73\x00\x00\x00\x00\x01\x03\x03\x00"; Net::RawSock::write_ip($pkt); Extended use: ------------- You will need a very nice package, called NetPacket, by Tim Potter Sample code to create and send a TCP/IP raw datagram from scratch : #! /usr/bin/perl use Net::RawSock; use NetPacket::IP; use NetPacket::TCP; ## Create IP my $ip = NetPacket::IP->decode(''); ## Init IP $ip->{ver} = 4; $ip->{hlen} = 5; $ip->{tos} = 0; $ip->{id} = 0x1d1d; $ip->{ttl} = 0x5a; $ip->{src_ip} = '127.0.0.1'; $ip->{dest_ip} = '127.0.0.1'; $ip->{flags} = 2; ## Create TCP my $tcp = NetPacket::TCP->decode(''); ## Init TCP $tcp->{hlen} = 5; $tcp->{winsize} = 0x8e30; $tcp->{src_port} = 13579; $tcp->{dest_port} = 80; $tcp->{seqnum} = 0xFEED; $tcp->{acknum} = 0xC0DE; $tcp->{flags} = SYN | FIN; ## Assemble $ip->{proto} = 6; $ip->{data} = $tcp->encode($ip); ## Create RAW my $pkt = $ip->encode; ## Write to network layer Net::RawSock::write_ip($pkt);