PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SSH Portscan via Perl



mozart
13.11.02, 12:47
Ich habe ein PerlScript gebastelt, welches mir über scp eine Datei auf n Hosts kopiert. Wenn nun allerdings ein Host aus meiner Liste offline ist, würde ich das gerne vorher wissen. Weiterhin besteht die Möglichkeit, das auf den Hosts kein sshd läuft. Dazu dacht ich mir, nimm doch einfach das Net::Ping Modul.

Das sieht dann ungefähr so aus:

$p = Net::Ping->new("tcp",2);
$p->bind($my_addr);
$p->{port_num} = getservbyname("ssh", "tcp");
if ($p->ping($HOST)) {
. . . . . .
}
$p->close ();

Das hab ich aus der CPAN Doku. Läuft aber nicht. Das Modul scheint einen normalen Ping zu machen. Nicht an Port 22.

Was mache ich falsch?

Oder gibt es eine andere Möglichkeit herrauszufinden, ob auf dem ZielHost ein sshd an einem Bestimmten Port läuft?

mozart
13.11.02, 14:40
Hab die Lösung. Ich nehme einfach das Net::Telnet Modul. Das liefert einen String zurück. So wie:

# Telnet Host 22
Trying 192.168.100.102...
Connected to Host.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-4

Connection closed by foreign host.

Damit kann man arbeiten...

tomes
13.11.02, 22:31
#!/usr/bin/perl -w
#
use strict;
use IO::Socket;
##############
my $port = 22;
my $iaddr = 0;
my $paddr = 0;
my $connect_time = 1;
my $protocol_name = "tcp";
my $protocol_id = getprotobyname($protocol_name);
my $hostip = "192.168.1.2";

$SIG{"ALRM"} = sub { close(SOCKET); };
alarm $connect_time;

socket(SOCKET, PF_INET, SOCK_STREAM, $protocol_id);

$iaddr = inet_aton($hostip);
$paddr = sockaddr_in($port, $iaddr);

print " Port $port offen.\n" if (connect(SOCKET, $paddr));
close(SOCKET);


dann vielleicht so ;)
Denn Perl ist Klasse

T;o)Mes

P.S.: Net::Ping ist nicht so toll ;)