0

ローカル ネットワークで smb 共有を検索してマウントする C プログラムを作成しています。見つかった smb サーバーのホスト名を取得するために、udp nbns パケットをサーバーに送信します。パケットは正しく、サーバーは応答します。これを確認するためにwiresharkを使用しています。送信したパケットと nbstat によって送信されたパケットを比較し、サーバーから返されたパケットも比較しました。ID とチェックサムを除いて、それらは同一です。

nbstat を使用して要求を行うと、応答パケットは適切に受信されますが、自分のパケットへの応答はおそらくファイアウォールによってブロックされます。サーバーからの応答を受信した後、クライアント マシンは icmp "Destination unreachable (Port unreachable)" メッセージをサーバーに送信します。ファイアウォールが送信していると思われます。

これはwiresharkからの出力です

No. Time Source Destination Protocol Length Info
12 29.870065 192.168.1.245 192.168.1.21 NBNS 92 Name query NBSTAT *<00><00.......
13 29.870494 192.168.1.21 192.168.1.245 NBNS 253 Name query response NBSTAT
14 870 259. 192.168.1.245 192.168.1.21 ICMP 281 宛先に到達できません (ポートに到達できません)

返信が通過できるようにするにはどうすればよいですか?

4

1 に答える 1

1

あなたのプログラムは UDP ポート 137 をリッスンしてサーバーの応答を受信して​​いますか? そうでない場合は、ホストが ICMP パケット Port Unreachable を送信する理由を説明しています。

ポート 137 でリッスンしている場合は、NBNS クエリをポート 137 に送信するときに送信元ポートを構成してみてください。したがって、ファイアウォールは、パケットをこのポートに送信する必要があります。

于 2013-04-24T12:07:21.773 に答える