Comenzile Unix, cum ar fi ping, ssh, funcționează bine, dar programele bazate pe socket-uri nu reușesc să se conecteze

Am primit un apel de la un tester cu privire la o mașină care nu reușea să facă software-ul nostru. Când am examinat mașina cu probleme, am realizat rapid că problema era destul de scăzută: traficul de rețea de intrare funcționează bine. Comanda de bază de ieșire, precum ping și ssh, funcționează bine, dar orice implică apelul connect() eșuează cu "Nici o rută pentru a găzdui".

De exemplu, pe această mașină particulară acest program va eșua în instrucțiunea connect() pentru orice adresă IP diferită de 127.0.0.1

#!/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 = )) {
    print $line;
}

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

Orice sugestii despre locul în care mașina este spartă? Rulează SUSE-10.2.

0

4 răspunsuri

Aș verifica configurația firewall-ului pe acea mașină. Este posibil ca iptables (presupun că SUSE are firewall iptables) să fie setat pentru a lăsa numai pachete ICMP ping.

0
adăugat
YOW! Cred că aveți dreptate - dar pe mașină greșită. După ce m-am gândit la asta, am încercat să dezactivez iptables-urile de pe mașină pe care totuși i-am "lucrat" și mașina care a fost "ruptă" a început să funcționeze! Mulțumiri!
adăugat autor Mike Heinz, sursa

Firewall-ul este oprit?

0
adăugat
Paravanul de protecție de pe cealaltă mașină pare să fi fost problema. Vă mulțumim pentru sugestii!
adăugat autor Mike Heinz, sursa

Firewall-ul este întotdeauna posibil, dar se spune că ssh se poate conecta, astfel încât pare puțin probabil. Aș spune să aruncați o privire la rutele ("ruta" comanda pe Linux), și asigurați-vă că nu aveți ca două rute implicite, sau ciudat sau orice altceva. În general, aș spune că testul ping și ssh și programul tău pe același IP îndepărtat, și dacă toate nu reușesc, ai o problemă de rută. Dacă numai programul dvs. nu reușește, probabil aveți fie o problemă de firewall, fie o problemă de program :)

0
adăugat

Încercați să indicați conectați() la aceeași gazdă: portul în care funcționează comanda SSH. De asemenea, rețineți că anumite firewall-uri pot aplica reguli diferite pentru diferite conturi de utilizator (și uneori pentru diferite executabile). Prin urmare, asigurați-vă că rulați ssh și aplicația dvs. de testare în același cont de utilizator și că SUID nu este setat pentru SSH.

0
adăugat