Как подобрать IP-пакеты и внедрить их на разные виртуальные машины и интерфейс
Я пытался решить эти 2 проблемы, но безуспешно.
Интересно, возможно ли удалить определенные пакеты из интерфейса с Gopacket или это только для прослушивания по проводам? Например, когда я отправляю пакет UDP на неправильный порт, а затем с помощью Gopacket исправляю его, он отправляет 2 пакета, 1 на неправильный порт и 1 на правильный. Есть ли способ отбросить / отбросить неправильный пакет с Gopacket?
То, что я пытаюсь сделать, это собрать все пакеты, отправленные клиентом по 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, может быть, посмотрите, как они построены, как вы хотите сделать что-то подобное (туннелирование пакетов).