Commandes Unix comme ping, ssh, fonctionnent bien, mais les programmes basés sur socket échouent dans la connexion

J'ai reçu un appel d'un testeur à propos d'une machine qui échouait à notre logiciel. Quand j'ai examiné la machine à problème, j'ai rapidement réalisé que le problème était assez bas: le trafic réseau entrant fonctionne bien. La commande sortante de base comme ping et ssh fonctionne correctement, mais tout ce qui implique l'appel de connect() échoue avec "No route to host".

Par exemple, sur cette machine particulière , ce programme échouera sur 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 = )) {
    print $line;
}

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

Des suggestions sur l'endroit où cette machine est cassée? Il tourne SUSE-10.2.

0

4 Réponses

Je voudrais vérifier la configuration du pare-feu sur cette machine. Il est possible pour iptables (je suppose que votre SUSE a iptables firewall) d'être configuré pour laisser passer seulement des paquets ICMP.

0
ajouté
Yow! Je pense que vous avez raison, mais sur la mauvaise machine. Après y avoir réfléchi, j'ai essayé de désactiver les iptables sur la machine que je pensais "travailler" et la machine qui était "cassée" a commencé à fonctionner! Merci!
ajouté l'auteur Mike Heinz, source

Le pare-feu est-il éteint?

0
ajouté
Le pare-feu sur l'autre machine semble avoir été le problème. Merci pour les suggestions!
ajouté l'auteur Mike Heinz, source

Le pare-feu est toujours possible, mais cela signifie que ssh peut se connecter, ce qui semble peu probable. Je dirais jeter un oeil à la route (commande "route" sur Linux), et assurez-vous que vous n'avez pas comme deux routes par défaut, ou étranges ou quoi que ce soit. Dans l'ensemble, je dirais test ping et ssh et votre programme sur la même adresse IP distante, et si tous échouent, vous avez un problème de routage. Si seulement votre programme échoue, vous avez probablement un problème de pare-feu ou un problème de programme :)

0
ajouté

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

0
ajouté
(TgLINUX) GNU/LINUX fr-Tchat TeleGram
(TgLINUX) GNU/LINUX fr-Tchat TeleGram
565 des participants

Groupe d'échange et d'entraide sur les OS GNU/Linux exclusivement, ouvert au public débutants,passionnés & habitués. $sudo ./bienvenue.sh REGLES(CGU): http://telegra.ph/TgLinux-09-03 FBK,TWEET: @TgLinux CHAINE:@UbuntuFacile @FrLibreOffice