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, и я был бы рад помочь вам, если у вас есть еще вопросы.