Net::RawIP patch@ 28/09/09 07:38 pm
While I was testing rscan, I was getting a lot of crashes with a message that said "sendto() at (my path)/Net/RawIP.pm". After some digging, I found where the error was coming from and it appears to be that Net::RawIP dies whenever there's an error sending a packet. This, I assume, is to stop apps running after the file descriptor it's using to write packets to goes invalid, but as I don't think that can even really happen with a raw socket, it's probably not that big a deal. If a raw socket filehandle does go invalid, you've probably got some serious configuration or hardware problems that you should be dealing with anyway.
My patch technically breaks part of Net::RawIP, but for my uses it broke it just right. You can either read on, or just grab the patch here. You can apply it by navigating to the directory where you've downloaded the Net::RawIP source to and running "patch -i ~/rawip.patch" (replacing ~ with wherever you've downloaded it to). Following the patch, make it as usual. Here's what you'll want to see (boring parts removed):
mcj@akizuki:~/rawip$ wget http://search.cpan.org/CPAN/authors/id/S/SA/SAPER/Net-RawIP-0.25.tar.gz
[snip]
2009-09-28 19:31:29 (487 KB/s) - `Net-RawIP-0.25.tar.gz' saved [43474/43474]
mcj@akizuki:~/rawip$ wget http://mastercj.net/software/rscan/rawip.patch
[snip]
2009-09-28 19:31:40 (34.3 MB/s) - `rawip.patch' saved [472/472]
mcj@akizuki:~/rawip$ tar xf Net-RawIP-0.25.tar.gz
mcj@akizuki:~/rawip$ cd Net-RawIP-0.25
mcj@akizuki:~/rawip/Net-RawIP-0.25$ patch -i ../rawip.patch
patching file util.c
mcj@akizuki:~/rawip/Net-RawIP-0.25$ perl Makefile.PL
[snip]
Checking if your kit is complete...
Looks good
Writing Makefile for Net::RawIP
mcj@akizuki:~/rawip/Net-RawIP-0.25$ make
cp lib/Net/RawIP/iphdr.pm blib/lib/Net/RawIP/iphdr.pm
cp lib/Net/RawIP/udphdr.pm blib/lib/Net/RawIP/udphdr.pm
cp lib/Net/RawIP/icmphdr.pm blib/lib/Net/RawIP/icmphdr.pm
cp lib/Net/RawIP/generichdr.pm blib/lib/Net/RawIP/generichdr.pm
cp RawIP/libpcap.pod blib/lib/Net/RawIP/libpcap.pod
cp lib/Net/RawIP.pm blib/lib/Net/RawIP.pm
AutoSplitting blib/lib/Net/RawIP.pm (blib/lib/auto/Net/RawIP)
cp lib/Net/RawIP/opt.pm blib/lib/Net/RawIP/opt.pm
cp lib/Net/RawIP/ethhdr.pm blib/lib/Net/RawIP/ethhdr.pm
cp lib/Net/RawIP/tcphdr.pm blib/lib/Net/RawIP/tcphdr.pm
/usr/bin/perl /usr/share/perl/5.10/ExtUtils/xsubpp -typemap /usr/share/perl/5.10/ExtUtils/typemap -typemap typemap RawIP.xs > RawIP.xsc && mv RawIP.xsc RawIP.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ RawIP.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ util.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ eth.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ ifaddrlist.c
Running Mkbootstrap for Net::RawIP ()
chmod 644 RawIP.bs
rm -f blib/arch/auto/Net/RawIP/RawIP.so
cc -shared -O2 -g -L/usr/local/lib RawIP.o util.o eth.o ifaddrlist.o -o blib/arch/auto/Net/RawIP/RawIP.so \
-lpcap \
chmod 755 blib/arch/auto/Net/RawIP/RawIP.so
cp RawIP.bs blib/arch/auto/Net/RawIP/RawIP.bs
chmod 644 blib/arch/auto/Net/RawIP/RawIP.bs
Manifying blib/man3/Net::RawIP.3pm
Manifying blib/man3/Net::RawIP::libpcap.3pm
mcj@akizuki:~/rawip/Net-RawIP-0.25$ sudo make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.10.0/auto/Net/RawIP/RawIP.so
Writing /usr/local/lib/perl/5.10.0/auto/Net/RawIP/.packlist
Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod
mcj@akizuki:~/rawip/Net-RawIP-0.25$
My patch technically breaks part of Net::RawIP, but for my uses it broke it just right. You can either read on, or just grab the patch here. You can apply it by navigating to the directory where you've downloaded the Net::RawIP source to and running "patch -i ~/rawip.patch" (replacing ~ with wherever you've downloaded it to). Following the patch, make it as usual. Here's what you'll want to see (boring parts removed):
mcj@akizuki:~/rawip$ wget http://search.cpan.org/CPAN/authors/id/S/SA/SAPER/Net-RawIP-0.25.tar.gz
[snip]
2009-09-28 19:31:29 (487 KB/s) - `Net-RawIP-0.25.tar.gz' saved [43474/43474]
mcj@akizuki:~/rawip$ wget http://mastercj.net/software/rscan/rawip.patch
[snip]
2009-09-28 19:31:40 (34.3 MB/s) - `rawip.patch' saved [472/472]
mcj@akizuki:~/rawip$ tar xf Net-RawIP-0.25.tar.gz
mcj@akizuki:~/rawip$ cd Net-RawIP-0.25
mcj@akizuki:~/rawip/Net-RawIP-0.25$ patch -i ../rawip.patch
patching file util.c
mcj@akizuki:~/rawip/Net-RawIP-0.25$ perl Makefile.PL
[snip]
Checking if your kit is complete...
Looks good
Writing Makefile for Net::RawIP
mcj@akizuki:~/rawip/Net-RawIP-0.25$ make
cp lib/Net/RawIP/iphdr.pm blib/lib/Net/RawIP/iphdr.pm
cp lib/Net/RawIP/udphdr.pm blib/lib/Net/RawIP/udphdr.pm
cp lib/Net/RawIP/icmphdr.pm blib/lib/Net/RawIP/icmphdr.pm
cp lib/Net/RawIP/generichdr.pm blib/lib/Net/RawIP/generichdr.pm
cp RawIP/libpcap.pod blib/lib/Net/RawIP/libpcap.pod
cp lib/Net/RawIP.pm blib/lib/Net/RawIP.pm
AutoSplitting blib/lib/Net/RawIP.pm (blib/lib/auto/Net/RawIP)
cp lib/Net/RawIP/opt.pm blib/lib/Net/RawIP/opt.pm
cp lib/Net/RawIP/ethhdr.pm blib/lib/Net/RawIP/ethhdr.pm
cp lib/Net/RawIP/tcphdr.pm blib/lib/Net/RawIP/tcphdr.pm
/usr/bin/perl /usr/share/perl/5.10/ExtUtils/xsubpp -typemap /usr/share/perl/5.10/ExtUtils/typemap -typemap typemap RawIP.xs > RawIP.xsc && mv RawIP.xsc RawIP.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ RawIP.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ util.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ eth.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.25\" -DXS_VERSION=\"0.25\" -fPIC "-I/usr/lib/perl/5.10/CORE" -D_LINUX_ -D_ETH_ -D_IFLIST_ -D_GLIBC_ ifaddrlist.c
Running Mkbootstrap for Net::RawIP ()
chmod 644 RawIP.bs
rm -f blib/arch/auto/Net/RawIP/RawIP.so
cc -shared -O2 -g -L/usr/local/lib RawIP.o util.o eth.o ifaddrlist.o -o blib/arch/auto/Net/RawIP/RawIP.so \
-lpcap \
chmod 755 blib/arch/auto/Net/RawIP/RawIP.so
cp RawIP.bs blib/arch/auto/Net/RawIP/RawIP.bs
chmod 644 blib/arch/auto/Net/RawIP/RawIP.bs
Manifying blib/man3/Net::RawIP.3pm
Manifying blib/man3/Net::RawIP::libpcap.3pm
mcj@akizuki:~/rawip/Net-RawIP-0.25$ sudo make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.10.0/auto/Net/RawIP/RawIP.so
Writing /usr/local/lib/perl/5.10.0/auto/Net/RawIP/.packlist
Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod
mcj@akizuki:~/rawip/Net-RawIP-0.25$
permalink
0 comments

