2

Windows XP 以降のソリューション。できればC#またはC++で。

接続しようとしているデバイスがこれに応答しないため、サブネット ダイレクト ブロードキャスト (192.168.101.255 など) を使用してブロードキャストしたくありません。代わりに、ブロードキャストが他の NIC で送信されないように、宛先が 255.255.255.255 の UDP データグラムを特定の NIC/IP アドレスからのみ送信できるようにしたいと考えています。

これは、IP スタックを回避する必要があることを意味します。これが問題です。特定の NIC/MAC アドレスからのみ UDP/IP 準拠のデータグラムを送信するために Windows の IP スタックを回避するにはどうすればよいですか?

4

4 に答える 4

2

WinPcapを使用してC#で生のpcaketを送信するには、Pcap.Netを使用できます。これは、C ++ / CLIおよびC#で記述されたWinPcapのラッパーであり、パケットの解釈と作成のフレームワークが含まれています。

于 2010-04-19T14:34:25.640 に答える
2

INADDR_ANY を使用する代わりに、ソケットを目的のインターフェイスに bind() するだけですか?

// Make a UDP socket
SOCKET s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
// Bind it to a particular interface
sockaddr_in name={0};
name.sin_family = AF_INET;
name.sin_addr.s_addr = inet_addr("192.168.101.3"); // whatever the ip address of the NIC is.
name.sin_port = htons(PORT);
bind(s,(sockaddr*)name);
于 2009-05-07T14:11:24.960 に答える
1

私はこれを試したことはありませんが、WinPCap で raw sendを実行できることは知っています。これは非常に低いレベルで動作するため、完全なブロードキャストをバイパスするのに十分低いレベルでスタックに送信できる可能性があります。そこにはさまざまな C# ラッパーがあり、もちろん、そこにある通常の C/C++ コードを使用できます。トリックは、送信したい適切なアダプターにバインドすることであり、それがうまくいくかもしれないと思います.

于 2009-05-07T17:43:31.987 に答える
0

ブロードキャスト アドレス 255.255.255.255 は一般的すぎます。ネットワーク インターフェイスごとに異なるブロードキャスト アドレスを作成する必要があります。

于 2010-02-05T19:33:52.507 に答える