<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: network code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 22:03:01 GMT</pubDate>
    <description>DZone Snippets: network code</description>
    <item>
      <title>Perl : scan a list of networks, looking for hosts responding on the port 80 (http)</title>
      <link>http://snippets.dzone.com/posts/show/5467</link>
      <description>// Input : a list of address of routers, in dotted decimal notation&lt;br /&gt;&lt;code&gt;&lt;br /&gt;use strict;&lt;br /&gt;use Net::Ping;&lt;br /&gt;use IO::Socket::INET;&lt;br /&gt;&lt;br /&gt;sub isodate() {&lt;br /&gt;        my ($day, $mon, $year, $hour, $min, $sec) = (localtime)[3, 4, 5, 2, 1, 0];&lt;br /&gt;        $mon++; # 0-based index&lt;br /&gt;        $year = $year + 1900;&lt;br /&gt;        my $date = sprintf ("%04i-%02i-%02i %02i\:%02i\:%02i", $year, $mon, $day, $hour, $min, $sec);&lt;br /&gt;        return $date;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub testhost {&lt;br /&gt;       my $p = new Net::Ping("tcp");&lt;br /&gt;       $p-&gt;{port_num}=80; &lt;br /&gt;       my @result = $p -&gt; ping($_[0],2);&lt;br /&gt;       return $result[0];&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;sub to_dot {&lt;br /&gt;	my $n = shift;&lt;br /&gt;	my @decimal;&lt;br /&gt;	for (1..4) {&lt;br /&gt;		unshift @decimal, $n &amp; 0xFF;&lt;br /&gt;		$n &gt;&gt;= 8;&lt;br /&gt;	}&lt;br /&gt;	return join(".",@decimal);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;my %dejavu;&lt;br /&gt;open FH,"liste.txt";&lt;br /&gt;while (&lt;FH&gt;) {&lt;br /&gt;	chomp;&lt;br /&gt;	my ($routeur,$mask)=split;&lt;br /&gt;	&lt;br /&gt;	next if $routeur !~ /\d+\.\d+\.\d+\.\d+$/ or $mask !~ /\d+\.\d+\.\d+\.\d+$/;&lt;br /&gt;	&lt;br /&gt;	next if defined($dejavu{$routeur});&lt;br /&gt;	$dejavu{$routeur}=1;&lt;br /&gt;	&lt;br /&gt;	my ($o1,$o2,$o3,$o4) = split /\./,$mask;&lt;br /&gt;	my $mask=$o1*256**3+$o2*256**2+$o3*256+$o4;&lt;br /&gt;	my $num = $mask ^ 0xFFFFFFFF;&lt;br /&gt;	$num--;&lt;br /&gt;&lt;br /&gt;	my ($o1,$o2,$o3,$o4) = split /\./,$routeur;&lt;br /&gt;	my $net=$o1*256**3+$o2*256**2+$o3*256+$o4 &amp; $mask;&lt;br /&gt;	&lt;br /&gt;	#print join("|",$routeur,&amp;to_dot($net),$num)."\n";&lt;br /&gt;	&lt;br /&gt;	print "Starting scanning network ".to_dot($net).", router = ".$routeur."\n";&lt;br /&gt;	print "Adresses demarrant de ".to_dot($net+1)." et finissant a ".to_dot($net+$num).".\n";&lt;br /&gt;	for my $i (1..$num) {&lt;br /&gt;		my $host=to_dot($net+$i);&lt;br /&gt;		if ( &amp;testhost($host) ) {&lt;br /&gt;			print "$host is alive\n";&lt;br /&gt;			my $port=80;&lt;br /&gt;			my $sock = new IO::Socket::INET (PeerAddr =&gt; $host,&lt;br /&gt;					     PeerPort =&gt; $port,&lt;br /&gt;					     Proto =&gt; 'tcp');&lt;br /&gt;			if ($sock){&lt;br /&gt;				close $sock;&lt;br /&gt;				print "$port -open on $host\n";&lt;br /&gt;				open OUT,"&gt;&gt;webservers.txt";&lt;br /&gt;				print OUT join("|",isodate(),$host,to_dot($net),$routeur)."\n";&lt;br /&gt;				close OUT;&lt;br /&gt;			}	else	{&lt;br /&gt;				print "$port -closed on $host\n";&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;		} else {&lt;br /&gt;			print "$host is not responding\n";&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;close FH;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 06 May 2008 07:05:28 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5467</guid>
      <author>bouffon69 (Sylvain Le Courtois)</author>
    </item>
  </channel>
</rss>
