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

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
Brasil Linux
Brasil Linux
2 873 dos participantes

O primeiro e grande grupo sobre LINUX do Telegram, que temos como base o S.O. GNU/Linux, que vai de usuários iniciantes / avançados! Vejam nossos parceiros: http://urele.com/parceiros Desde: 16/11/2015

Técnicos em Informática
Técnicos em Informática
2 517 dos participantes

Um grupo com foco em assuntos técnicos, hardware, servidores e resolução de problemas em Windows e Linux. Canal: @dicasdeti

Linux
Linux
1 950 dos participantes

Grupo focado para compartilhar conhecimentos e tirar dúvidas sobre Linux + LPIC.Proibido a divulgação de materiais copyright e pirataria.Bot: @GrupoLinuxbot . Link: https://goo.gl/KQYqhN Steam: https://goo.gl/KgQ0yH Estatísticas: https://goo.gl/Ld1BKM

SysAdmin Brasil Linux
SysAdmin Brasil Linux
320 dos participantes

Sysadmin é o profissional responsável pelo ambiente de TI de uma organização. Isso normalmente compreende servidores, equipamentos de rede, acesso à Internet, serviços ao usuário, banco de dados, segurança e outros. Grupo parceiro: @BrasilLinux 23/06/17