#!/usr/bin/perl
This is a simple script that scans a machine for reachable TCP ports.
usage : tcpscan <hostname> [maxtcp]
Apr 96 Rob J Meijer rmeijer@xs4all.nl
my ($name,$aliases,$type,$len,$thataddr);
my ($srv_name,$srv_aliases,$srv_port,$srv_proto);
$|=1;
$tghost=$ARGV[0];
if ($#ARGV>0) {
$maxprt=$ARGV[1];
}
else {
$maxprt=1023; #The well-known ports of 65535
}
if ($tghost eq "") {
print "scans a machine for reachable TCP ports\n",
"usage: tcpscan <hostname> [maxports to scan]\n";
}
else {
print "scanning $maxprt ports on $tghost\n";
$AF_INET=2;
$SOCK_STREAM=1;
$sockaddr='S n a4 x8';
($name,$aliases,$proto)=getprotobyname('tcp');
foreach $port (1 .. $maxprt)
{
($name,$aliases,$port)=getservbyname($port,'tcp')
unless $port=~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr)=gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr)=gethostbyname($tghost);
$this=pack($sockaddr,$AF_INET,0,$thisaddr);
$that=pack($sockaddr,$AF_INET,$port,$thataddr);
if (!socket(S,$AF_INET,$SOCK_STREAM,$proto))
{
die $!;
}
if (!bind(S,$this))
{
die $!;
}
if (connect(S,$that))
{
($srv_name,$srv_aliases,$srv_port,$srv_proto)=getservbyport($port,'tcp');
print "\r$port $srv_name\n";
close(S);
}
else
{
print "\r($port)";
}
}
print "\r \n";
}