Unix-Befehle wie ping, ssh, funktionieren aber socket-basierte Programme in connect versagen

StackOverflow https://stackoverflow.com/questions/96113

  •  01-07-2019
  •  | 
  •  

Frage

Ich bekam einen Anruf von einem Tester über eine Maschine, die unsere Software versagt. Wenn ich das Problem Maschine untersucht, stellt ich schnell das Problem recht niedriges Niveau war: Inbound Netzwerkverkehr funktioniert gut. Grund outbound Befehl wie ping und ssh arbeitet gut, aber alles, was unter Einbeziehung des connect() Anruf mit versagt „No route to host“.

Zum Beispiel - auf diese besondere Maschine werden dieses Programm für jede andere IP-Adresse als connect() auf der 127.0.0.1 Anweisung fehlschlagen:

#!/usr/bin/perl -w
use strict;
use Socket;
my ($remote,$port, $iaddr, $paddr, $proto, $line);

$remote  = shift || 'localhost';
$port    = shift || 2345;  # random port
if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
die "No port" unless $port;
$iaddr   = inet_aton($remote)           || die "no host: $remote";
$paddr   = sockaddr_in($port, $iaddr);

$proto   = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto)      || die "socket: $!";
connect(SOCK, $paddr)    || die "connect: $!"; 
while (defined($line = <SOCK>)) {
    print $line;
}

close (SOCK)        || die "close: $!";
exit;

Irgendwelche Vorschläge darüber, wo diese Maschine kaputt ist? Es läuft SUSE-10.2.

War es hilfreich?

Lösung

würde ich Firewall-Konfiguration auf der Maschine überprüfen. Es ist möglich, iptables (Ich denke, Ihr SUSE iptables Firewall) eingerichtet werden Trog nur Pakete ping ICMP zu lassen.

Andere Tipps

Ist die Firewall ausgeschaltet?

Firewall ist immer möglich, aber es tut sagen, dass SSH eine Verbindung herstellen kann, so dass scheint unwahrscheinlich. Ich würde sagen, einen Blick auf die Routen (Befehl „route“ auf Linux) haben, und stellen Sie sicher, dass Sie nicht wie zwei Standardrouten nicht installiert haben, oder seltsame Einsen oder was auch immer. Alles in allem würde ich sagen, Test ping und ssh und Ihr Programm auf dem gleichen entfernten IP, und wenn sie alle scheitern, haben Sie eine Route Problem. Wenn nur Ihr Programm fehlschlägt, haben Sie wahrscheinlich entweder ein Firewall Problem oder Programm Problem :)

Versuchen Sie verbinden zeigt () auf dem gleichen Host: Port, an dem Ihr SSH-Befehl funktioniert. Beachten Sie außerdem, dass einige Firewalls im Auge verschiedene Regeln für verschiedene Benutzerkonten anwenden können (und manchmal auch für andere ausführbare Dateien). Stellen Sie daher sicher, dass Sie ssh und Ihren Test-App unter demselben Benutzerkonto ausgeführt werden und dass SUID ist nicht für den SSH gesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top