Schrift
[thread]6997[/thread]

UPD Port offen oder zu?



<< >> 4 Einträge, 1 Seite
J-jayz-Z
 2005-05-17 00:53
#54986 #54986
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

kann ich irgendwie abfragen, ob ein UDP Port an einem Host geschlossen ist?
Mit TCP habe ich das so gelöst:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
$socket = IO::Socket::INET->new(
PeerAddr => $addr,
PeerPort => $port,
Proto => "tcp",
Type => SOCK_STREAM);

unless(defined($socket))
{
print "Port $port (TCP) ist geschlossen!\n";
exit 0;
}
print "Port $port (TCP) ist offen\n";

aber mit UDP geht das so aber nicht...
Kann mir da jemand helfen? ? ?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Dubu
 2005-05-17 01:45
#54987 #54987
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Da UDP verbindungslos ist, geht das nicht so einfach. Eine Loesung waere, ein Paket an den Port zu schicken und zu schauen, ob ein "ICMP Port Unreachable" Paket zurueck kommt. Wenn nicht, ist der Port wahrscheinlich offen. Oder gefiltert. Oder das UDP- oder ICMP-Paket nicht angekommen.
J-jayz-Z
 2005-05-17 15:23
#54988 #54988
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich hab mir da jetzt mal sowas hier gebastelt für udp, bekomme aber ein die, könnt ihr mir da vielleicht helfen?
Ih hab mit sockets normalerweise nischt zu tun...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$socket = IO::Socket::INET->new(
PeerAddr => $hostname,
PeerPort => $portnumber,
Proto => 'udp'
) || die "socket: $@";

my $msg = "";
my $ip = inet_aton($hostname);
my $port = sockaddr_in($portnumber, $ip);
send($socket, $msg, 0, $port) == length($msg) or die $!;
my $msg_insert;
my $max = 30;

my $port_insert = recv($socket, $msg_insert, $max, 0) or die "recv:$!";
my ($portno, $ipaddr) = sockaddr_in($port_insert);
my $host = gethostbyaddr($ipaddr, AF_INET);
print "$host($portno) sagte: $msg_insert";

und beim zweiten die bringt er mir connection refused.
Allerdings auch bei 100% geöffneten ports...:-(
Kann mir da vielleicht jemand helfen?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
betterworld
 2005-05-17 16:53
#54989 #54989
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Bei mir funktioniert Dein Script wunderbar: Bei geschlossenen Ports gibt es "Connection refused", und bei geoeffneten oder gefilterten Ports wartet es bis in die Ewigkeit auf eine Antwort.

Es wundert mich aber, dass Du bei einem geoeffneten Port "Connection refused" bekommst. Probier doch mal, mit strace und tcpdump herauszufinden, was genau passiert. Oder probier mal, ob Du den Port mit netcat erreichen kannst.\n\n

<!--EDIT|betterworld|1116334432-->
<< >> 4 Einträge, 1 Seite



View all threads created 2005-05-17 00:53.