1

次を使用して、選択した宛先MACアドレスにイーサネットパケットを送信しようとしていますjPcap:

public void sendPacket(Packet packet, byte[] srcMac, byte[] dstMac, Interface i) throws IOException 
{
  JpcapSender sender = JpcapSender.openDevice(i.netInterface);
  EthernetPacket ether = new EthernetPacket();
  ether.frametype = EthernetPacket.ETHERTYPE_IP;
  ether.src_mac = srcMac;  // MAC address of selected interface
  ether.dst_mac = dstMac;  // MAC addr. choosed somwhere on form
  packet.datalink = ether;

  sender.sendPacket(packet);
  sender.close();
}

動作しますが、 !ではなく選択したインターフェイスに常に送信されます。dst_mac

そのため、選択したインターフェイスと次の関係がわかりませんscr_mac:

  • interfaceなぜ (と)の両方を選択する必要があるのscr_macですか?
  • 使用されていないのに、なぜ追加するdst_mac必要があるのですか?
  • どのように私のコンピュータからパケットを送信するのですか?
4

1 に答える 1

1

なぜ両方 (インターフェイスと scr_mac) を選択する必要があるのですか?

インターフェイスは、ソフトウェアが通信 (パケットの送受信) に使用するものです。これは通常、イーサネット カードです。Jpcap が情報の送信方法を認識できるように指定する必要があります。src_mac アドレスは、パケット ヘッダーの一部です。動的に使用することを意図しているため、パケットが送信されるときに適切な情報で更新されます。src_mac は、パケットの送信方法において必ずしも役割を果たすとは限りません。

dst_mac を使用していないのに、なぜ追加しなければならないのですか?

使用されています。指定された MAC アドレスを持つ他のデバイスが、直接イーサネット接続によってソースにリンクされていることを確認し、データを受信する準備ができていることも確認してください。現在、私が疑っているのは、ホスト コンピューターの同じインターフェイスを介して読み戻そうとしていることです。

Jpcap の Web サイトには、役立つチュートリアルとサンプルがいくつかあります。私は Jpcap ライブラリをかなり扱ってきました。他に質問があれば喜んでお手伝いします。

于 2012-06-19T13:12:33.667 に答える