Как отправить сообщение ICMP через указанный c сетевой интерфейс в Go? - PullRequest
0 голосов
/ 13 апреля 2020

Я новичок в Go. Я пытаюсь написать программу, которая пингует 8.8.8.8, но через указанный c сетевой интерфейс (например, eth0). С помощью команды ping на Linux вы можете указать флаг -I, чтобы ICMP-сообщение отправлялось через указанный сетевой интерфейс c.

ping -I enp4s0 8.8.8.8

Как это сделать с Go? Я просмотрел несколько пакетов - github.com/sparrc/go-ping, github.com/tatsushid/go-fastping и golang.org/x/net/icmp; похоже, никто из них не позволил мне установить интерфейс.

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете использовать net.DialTCP или net.DialIP, если у каждого интерфейса есть отдельный IP-адрес, они вернут вам соединение через этот интерфейс. Затем вы можете вручную отправить пинг.

Вы также можете использовать пакет exec https://golang.org/pkg/os/exec/ для отправки ping по сетевому интерфейсу. Вы можете использовать exec для взаимодействия с оболочкой и просто перенаправить вывод обратно в буфер и прочитать его.

...