Как подобрать IP-пакеты и внедрить их на разные виртуальные машины и интерфейс

Я пытался решить эти 2 проблемы, но безуспешно.

  1. Интересно, возможно ли удалить определенные пакеты из интерфейса с Gopacket или это только для прослушивания по проводам? Например, когда я отправляю пакет UDP на неправильный порт, а затем с помощью Gopacket исправляю его, он отправляет 2 пакета, 1 на неправильный порт и 1 на правильный. Есть ли способ отбросить / отбросить неправильный пакет с Gopacket?

  2. То, что я пытаюсь сделать, это собрать все пакеты, отправленные клиентом по IP, а затем инкапсулировать каждый пакет в качестве полезной нагрузки в другом протоколе X и отправить его на удаленный хост, который будет получать по протоколу X, получить полезную нагрузку и отправьте его через интерфейс, чтобы снова связаться с сервером по IP. (IP (клиент) -> протокол X (анализатор 1) -> протокол X (анализатор 2) -> IP (сервер))

Я проверил, что пакет, который Sniffer 1 получает из интерфейса клиента, тот же, что поступает в Sniffer 2, но проблема в том, что Sniffer 2 внедряет его в интерфейс сервера. Я не вижу этот пакет с tcpdump или любым другим инструментом. Пакет вводится с помощью этой команды:

if handle, err := pcap.OpenLive("enp0s8", 1600, true, 100); err != nil {
    panic(err)
} else {
   err = handle.WritePacketData(packet.Data())
}

Если избежать части протокола X, то сервер будет получать сообщения от клиента, но с протоколом X это невозможно.

Заранее спасибо!

1 ответ

Согласно документации

Пакет pcap позволяет пользователям gopacket считывать пакеты по проводам или из файлов pcap.

Чтобы отказаться от пакетов, вам нужно будет их перехватить. В зависимости от того, насколько универсальным вы хотите решить эту проблему, вам, вероятно, нужно подключиться к ядру. Я рекомендую изучить iptables и netfilters.

Я нашел несколько VPN, которые написаны на go, может быть, посмотрите, как они построены, как вы хотите сделать что-то подобное (туннелирование пакетов).

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