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

  • 为什么我必须同时选择(interfacescr_mac)?
  • dst_mac为什么即使不使用我也要添加?
  • 那么如何从我的计算机中发送数据包呢?
4

1 回答 1

1

为什么我必须同时选择(接口和 scr_mac)?

接口是软件用来通信(发送或接收数据包)的接口。这通常是您的以太网卡。您需要指定它以便 Jpcap 知道如何发送信息。src_mac 地址是包头的一部分。它旨在动态使用,以便在发送数据包时使用适当的信息对其进行更新。src_mac 不一定会影响数据包的发送方式。

为什么即使不使用也必须添加 dst_mac?

它被使用。确保通过直接以太网连接将具有指定 MAC 地址的其他设备链接到您的源,并确保它已准备好接收数据。现在,我怀疑正在发生的事情是,您正试图通过主机上的相同界面进行回读。

Jpcap 的网站上有一些我觉得有用的教程和示例。我已经使用 Jpcap 库做了很多工作,如果您还有任何问题,我很乐意为您提供帮助。

于 2012-06-19T13:12:33.667 回答