Les commandes Unix telles que ping, ssh fonctionnent bien, mais les programmes basés sur des sockets échouent dans la connexion

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

  •  01-07-2019
  •  | 
  •  

Question

J'ai reçu un appel d'un testeur concernant une machine en panne de notre logiciel. Lorsque j’ai examiné la machine à problèmes, j’ai vite réalisé que le problème était assez grave: le trafic réseau entrant fonctionne bien. Les commandes sortantes de base telles que ping et ssh fonctionnent bien, mais tout ce qui implique l’appel connect () échoue avec " No route to host ".

Par exemple, sur cette machine , ce programme échouera avec l'instruction connect () pour toute adresse IP autre que 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;

Des suggestions sur l'endroit où cette machine est en panne? Il exécute SUSE-10.2.

Était-ce utile?

La solution

Je vérifierais la configuration du pare-feu sur cette machine. Il est possible de configurer iptables (je suppose que votre pare-feu SUSE est doté d’un pare-feu iptables) pour ne laisser passer que le traitement des paquets ICMP.

Autres conseils

Le pare-feu est-il désactivé?

Un pare-feu est toujours possible, mais cela dit que ssh peut se connecter, ce qui semble peu probable. Je vous conseille de consulter les routes (commande "route" sous Linux) et de vous assurer que vous n'avez pas deux routes par défaut, ou des routes étranges ou autre. Dans l'ensemble, je dirais de tester ping et ssh et votre programme sur la même adresse IP distante, et s'ils échouent tous, vous avez un problème de route. Si seul votre programme échoue, vous avez probablement un problème de pare-feu ou de programme :)

Essayez de pointer connect () sur le même hôte: port sur lequel votre commande SSH fonctionne. N'oubliez pas non plus que certains pare-feu peuvent appliquer des règles différentes pour différents comptes d'utilisateurs (et parfois pour différents exécutables). Par conséquent, assurez-vous que vous exécutez ssh et votre application de test sous le même compte d'utilisateur et que le SUID n'est pas défini pour SSH.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top