comandos Unix como de ping, ssh, funcionam bem, mas os programas baseados em soquete estão falhando em conexão

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu recebi um telefonema de um testador de cerca de uma máquina que estava falhando o nosso software. Quando examinei a máquina problema, logo percebi que o problema era bastante baixo nível: o tráfego de rede de entrada funciona bem. comando básico de saída como de ping e ssh estão funcionando bem, mas qualquer coisa que envolva a chamada connect() está falhando com "No route to host".

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

Todas as sugestões sobre onde esta máquina está quebrada? Está funcionando SUSE-10.2.

Foi útil?

Solução

Gostaria de verificar a configuração de firewall nessa máquina. É possível para iptables (acho que o seu SUSE tem iptables firewall) para ser configurado para permitir que trough única pacotes ping ICMP.

Outras dicas

É o firewall desativado?

Firewall é sempre possível, mas não dizer que ssh pode se conectar, de modo que parece improvável. Eu diria que ter um olhar para as rotas (comando "route" no Linux), e certifique-se que você não tem como duas rotas padrão, ou aqueles estranhos ou qualquer outra coisa. Apesar de tudo, diria que de ping de teste e ssh e seu programa no mesmo IP distante, e se todos eles falham, você tem um problema de rota. Se apenas o seu programa falhar, você provavelmente tem tanto um problema de firewall ou problema programa :)

Tente apontando connect () para o mesmo host: porta onde a obras de comando SSH. Além disso, mantenha em mente 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 ssh e seu aplicativo de teste sob a mesma conta de usuário e que SUID não está definido para SSH.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top