jPcap - отправить пакет на выбранный MAC (не выбранный интерфейс)

Я пытаюсь отправить пакет Ethernet на выбранный 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 даже если он не используется?
  • как отправить пакет из моего компьютера тогда?

1 ответ

Решение

почему я должен выбрать оба (интерфейс и scr_mac)?

Интерфейс - это то, что программное обеспечение использует для связи (для отправки или получения пакетов). Обычно это ваша сетевая карта. Вы должны указать это, чтобы Jpcap знал, как отправить информацию. Адрес src_mac является частью заголовка пакета. Он предназначен для динамического использования, чтобы по мере отправки пакетов они обновлялись соответствующей информацией. Src_mac не обязательно играет роль в том, как отправляется пакет.

почему я должен добавить dst_mac, даже если он не используется?

Это использовано. Убедитесь, что у вас есть другое устройство с указанным mac-адресом, связанным с вашим источником через прямое подключение к Ethernet, а также убедитесь, что оно готово к приему данных. Прямо сейчас, что я подозреваю, происходит, вы пытаетесь читать через тот же интерфейс на главном компьютере.

На сайте Jpcap есть несколько уроков и примеров, которые я нашел полезными. Я довольно много работал с библиотекой Jpcap, и я был бы рад помочь вам, если у вас есть еще вопросы.

Другие вопросы по тегам