Los comandos de Unix como ping, ssh, funcionan bien, pero los programas basados ​​en sockets fallan al conectarse

Recibí una llamada de un probador sobre una máquina que estaba fallando en nuestro software. Cuando examiné la máquina problema, rápidamente me di cuenta de que el problema era bastante bajo: el tráfico de la red entrante funciona bien. El comando de salida básico como ping y ssh funcionan bien, pero cualquier cosa que implique la llamada connect() está fallando con "No route to host".

Por ejemplo, en esta máquina en particular este programa fallará en la instrucción connect() para cualquier dirección IP que no sea 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;

¿Alguna sugerencia sobre dónde está rota esta máquina? Está ejecutando SUSE-10.2.

0
agregado editado
Puntos de vista: 5

4 Respuestas

Verificaría la configuración del firewall en esa máquina. Es posible que iptables (supongo que su SUSE tenga el firewall de iptables) se configure para permitir que solo haga ping a los paquetes ICMP.

0
agregado
¡Yow! Creo que lo tienes bien, pero en la máquina equivocada. Después de pensarlo, intenté desactivar las iptables en la máquina que, a pesar de que estaba "funcionando", ¡y la máquina que estaba "rota" comenzó a funcionar! ¡Gracias!
agregado el autor Mike Heinz, fuente

¿Está apagado el cortafuegos?

0
agregado
El firewall en la otra máquina parece haber sido el problema. Gracias por las sugerencias!
agregado el autor Mike Heinz, fuente

El firewall siempre es posible, pero dice que ssh puede conectarse, por lo que parece poco probable. Diría que eche un vistazo a las rutas (comando de "ruta" en Linux) y asegúrese de no tener como dos rutas predeterminadas, ni extrañas, ni lo que sea. Con todo, yo diría que prueba ping y ssh y tu programa en la misma IP distante, y si todos fallan, tienes un problema de ruta. Si solo falla su programa, es probable que tenga un problema de firewall o problema del programa :)

0
agregado

Intente señalar connect() al mismo host: puerto donde funciona su comando SSH. Además, tenga en cuenta que algunos cortafuegos pueden aplicar diferentes reglas para diferentes cuentas de usuario (y en ocasiones para diferentes ejecutables). Por lo tanto, asegúrese de ejecutar ssh y su aplicación de prueba bajo la misma cuenta de usuario y ese SUID no está configurado para SSH.

0
agregado