1

テスターから、ソフトウェアに問題のあるマシンについて電話がありました。問題のマシンを調べたところ、問題がかなり低いレベルのものであることがすぐにわかりました。インバウンド ネットワーク トラフィックは正常に機能しています。ping や ssh などの基本的な送信コマンドは正常に機能していますが、connect()呼び出しに関連するものはすべて「ホストへのルートがありません」で失敗しています。

たとえば、この特定のマシンconnect()では、このプログラムは次の IP アドレス以外のステートメントで失敗し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;

このマシンのどこが壊れているかについて何か提案はありますか? SUSE-10.2 を実行しています。

4

4 に答える 4

2

そのマシンのファイアウォール構成を確認します。iptables(SUSEにはiptablesファイアウォールがあると思います)を設定して、ICMPパケットのみをpingするように設定することができます。

于 2008-09-18T19:43:09.503 に答える
1

ファイアウォールはオフになっていますか?

于 2008-09-18T19:42:40.787 に答える
0

ファイアウォールは常に可能ですが、ssh で接続できると表示されているため、可能性は低いと思われます。ルート (Linux の「ルート」コマンド) を見て、2 つのデフォルト ルートや奇妙なルートなどがないことを確認してください。全体として、同じ離れた IP で ping と ssh とプログラムをテストし、それらがすべて失敗した場合は、ルートに問題があると言えます。プログラムだけが失敗する場合は、ファイアウォールまたはプログラムに問題がある可能性があります :)

于 2008-09-18T20:08:46.340 に答える
0

connect() を、SSH コマンドが機能するのと同じ host:port に向けてみてください。また、ファイアウォールによっては、ユーザー アカウントごとに (場合によっては実行可能ファイルごとに) 異なるルールを適用できることに注意してください。したがって、ssh とテスト アプリを同じユーザー アカウントで実行し、SUID が SSH に設定されていないことを確認してください。

于 2008-09-18T20:38:35.940 に答える