I got a call from a tester about a machine that was failing our software. When I examined the problem machine, I quickly realized the problem was fairly low level: Inbound network traffic works fine. Basic outbound command like ping and ssh are working fine, but anything involving the connect() call is failing with ‘No route to host’.
For example – on this particular machine this program will fail on the connect() statement for any IP address other than 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;
Any suggestions about where this machine is broken? It’s running SUSE-10.2.
I would check firewall configuration on that machine. It is possible for iptables (I guess your SUSE has iptables firewall) to be setup to let trough only ping ICMP packets.