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

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

  •  01-07-2019
  •  | 
  •  

Pregunta

Recibí una llamada de un evaluador acerca de una máquina que estaba fallando en nuestro software.Cuando examiné la máquina con problemas, rápidamente me di cuenta de que el problema era de nivel bastante bajo:El tráfico de red entrante funciona bien.Los comandos salientes básicos como ping y ssh funcionan bien, pero cualquier cosa que involucre el connect() la llamada falla con "No hay ruta al host".

Por ejemplo - en esta máquina en particular este programa fallará en el connect() declaración 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 = <SOCK>)) {
    print $line;
}

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

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

¿Fue útil?

Solución

Verificaría la configuración del firewall en esa máquina.Es posible que iptables (supongo que su SUSE tiene un firewall iptables) esté configurado para permitir solo hacer ping a paquetes ICMP.

Otros consejos

¿Está apagado el firewall?

El firewall siempre es posible, pero dice que ssh puede conectarse, por lo que parece poco probable.Yo diría que eche un vistazo a las rutas (comando "ruta" en Linux) y asegúrese de no tener dos rutas predeterminadas, ni rutas raras, ni nada por el estilo.Considerándolo todo, yo diría que pruebe ping y ssh y su programa en la misma IP distante, y si todos fallan, tiene un problema de ruta.Si solo su programa falla, probablemente tenga un problema de firewall o de programa :)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top