2012-01-30 16 views
1

Packet.Netで未処理のUDPパケットを送信しようとしていますが、device.SendPacket()関数はリンクレベルのPDUを受け入れるようです送信元MACアドレスと宛先MACアドレスを自分で把握することができます。 (ARPなどを使用)Packet.NetとSharpPcapでIPパケットを送信しますが、イーサネットフレームを生成します

Packet.NetでIPパケットを作成するにはどうすればよいですか?正しいイーサネットフレームが生成されていますか?

+0

の著者あなたはUDPを使っているので、あなたは、単に通常のようにそれを送信すると、下位層がそれを処理させてはいけない理由はどのような理由がありますあなたのためにすべて? – Brad

+0

@Brad私の現在の理由は、現在のコンピュータに既にバインドされているポートからデータを送信する必要があり、例外をスローせずに.Netで行う方法が見つからないということです。後で私はおそらくより多くの制御を必要とするでしょう。 – takteek

+0

@takteek - 同じポートへの複数のバインディングを可能にするソケットオプションがあります。これを行うには、 'socket.ExclusiveAddressUse = false;'を設定することができます。 –

答えて

1

宛先MACアドレスを知っている必要があります。最良の方法は、arpを使ってmacアドレスを見つけることです。アダプター自体から取得できる送信元アドレス。 sharppcapとpacket.netのソースリリースには、arpパケットと構築パケットの両方の例があります。

クリス

sharppcap/packet.net

+0

さて、これを機能要求と見なしてください。 :Pこれはちょっと混乱しています。device.SendPacketは、ネットワークレイヤのパケットを不満なく受け入れますが、送信に失敗します。たぶんそれはSendFrameまたは何かと呼ばれるべきです。 – takteek

+0

あなたは何を意味するか分かります。 SendPacket()がInternetLinkLayerPacket型のパケットだけを受け取るように変更された場合はどうなりますか?これにはEthernet、LinuxSLL、Ieee80211.RadioPacket、Ieee80211.PpiPacketが含まれます。それは、少なくとも、どのタイプのパケットを渡さなければならないかを明確にし、そのような状態を避けるでしょう。 –

+0

IpPacketからEthernetPacketを生成できる場合にも役立ちますか?これは、Arpなどを実行できるものですSharpPcapはデバイスを処理するので、SharpPcapの一部でPacket.NetではなくPacket.Netの一部でなければなりません.Petet.Netはパケットの解析などを処理します。IpPacketを取り込み、 Arp、EthernetPacketを返しますか? ARP.Resolve()メソッドが非常に簡単で、EthernetPacketにはsrc、dest、PayloadPacketという3つのフィールドしか記入されていないため、 –

関連する問題