De mr.blood para anonymousfree.com.ar (http://anonymousfree.com.ar)
Como no queremos liarnos mas de lo necesario dejamos los checksum a 0.
Codigo cliente.
#!/usr/bin/perl
use Socket;
use strict;
#~ Datos
my $data = "Hi!\n";
#~ UDP Header
my %udp = (sport=>(rand(3000)+5001), dport=>5000, len=>8+length($data), checksum=>0);
#~ IP Header
my %ip = (version=>4, IHL=>"45", ToS=>0, TL=>0, ID=>rand(20000), flags=>"010", FO=>"0"x13, TTL=>64,
Proto=>17, checksum=>0, saddr=>(gethostbyname("111.111.111.111"))[4],
daddr=>(gethostbyname("127.0.0.1"))[4]);
#~ Esto es cosa del protocolo IP, los flags y FO van "juntos"
my $ip_flags_FO=$ip{flags}.$ip{FO};
#~ Preparamos el paquete
my $paquete=pack("H2H2nnB16C2na4a4", $ip{IHL}, $ip{ToS}, $ip{TL}, $ip{ID},
$ip_flags_FO, $ip{TTL}, $ip{Proto},
$ip{checksum}, $ip{saddr}, $ip{daddr}).pack("nnnn",$udp{sport},
$udp{dport}, $udp{len}, $udp{checksum}).pack("a*", $data);
#~ Creamos el descriptor en SOCK del tipo SOCK_RAW
socket(SOCK, AF_INET, SOCK_RAW, 255);
#~ Para que la funcion send sepa donde enviarlo
my $destino = pack('Sna4x8', AF_INET, $udp{dport}, $ip{daddr});
send(SOCK,$paquete,0,$destino);
Fuentes:
http://rhosted.blogspot.com.es/2009/08/creating-udp-packetip-spoofing-through.html (Me apoye para los pack)
http://www.ietf.org/rfc/rfc791.txt (Me apoye para los pack tambien)
Propia (Horas mirando con Wireshark)
http://perldoc.perl.org/functions/pack.html
Sa1uDoS
P.D.: Como vereis por las fuentes los pack no son lo mio xD.
Buen aporte hermano... :)