Comandos Unix como ping, ssh, funcionam bem, mas programas baseados em soquetes estão falhando na conexão

Recebi uma ligação de um testador sobre uma máquina que estava falhando em nosso software. Quando examinei a máquina problemática, percebi rapidamente que o problema era de nível razoavelmente baixo: o tráfego de rede de entrada funciona bem. Comando de saída básico como ping e ssh estão funcionando bem, mas qualquer coisa envolvendo a chamada connect() está falhando com "No route to host".

Por exemplo - em esta máquina em particular este programa irá falhar na instrução connect() para qualquer endereço IP diferente 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;

Alguma sugestão sobre onde esta máquina está quebrada? Está executando o SUSE-10.2.

0
adicionado editado
Visualizações: 7

4 Respostas

Eu verificaria a configuração do firewall nessa máquina. É possível que o iptables (eu acho que o seu SUSE tem firewall iptables) seja configurado para permitir somente pacotes ICMP de ping.

0
adicionado
Uau! Eu acho que você está certo - mas na máquina errada. Depois de pensar sobre isso, eu tentei desativar o iptables na máquina que eu estava "trabalhando" e a máquina que estava "quebrada" começou a funcionar! Obrigado!
adicionado o autor Mike Heinz, fonte

O firewall está desativado?

0
adicionado
O firewall na outra máquina parece ter sido o problema. Obrigado pelas sugestões!
adicionado o autor Mike Heinz, fonte

O firewall é sempre possível, mas diz que o ssh pode se conectar, o que parece improvável. Eu diria que dê uma olhada no comando routes ("route" no Linux), e tenha certeza de que você não tem duas rotas padrão, ou estranhas, ou qualquer outra coisa. Tudo em tudo que eu diria teste ping e ssh e seu programa no mesmo IP distante, e se todos eles falharem, você tem um problema de rota. Se apenas o seu programa falhar, você provavelmente tem um problema de firewall ou problema de programa :)

0
adicionado

Tente apontar connect() para o mesmo host: port onde seu comando SSH funciona. Além disso, lembre-se de que alguns firewalls podem aplicar regras diferentes para diferentes contas de usuário (e às vezes para diferentes executáveis). Portanto, certifique-se de executar o ssh e seu aplicativo de teste na mesma conta de usuário e que o SUID não esteja configurado para SSH.

0
adicionado