Как вы можете выполнить ping IP-адрес из приложения golang? Конечная цель - проверить, находится ли сервер в сети.
Есть ли способ в стандартной библиотеке реализовать сетевой пинг?
Как вы можете выполнить ping IP-адрес из приложения golang? Конечная цель - проверить, находится ли сервер в сети.
Есть ли способ в стандартной библиотеке реализовать сетевой пинг?
Как упоминает @desaipath, в стандартной библиотеке нет способа сделать это. Однако вам не нужно писать код для себя - это уже сделано:
Примечание. Для отправки ICMP-пакетов требуются привилегии root
Мне нужно было то же самое, что и вы, и я сделал обходной путь (с exec.Command
) для моей малины Pi, чтобы проверить, находятся ли серверы в сети. Вот экспериментальный код
out, _ := exec.Command("ping", "192.168.0.111", "-c 5", "-i 3", "-w 10").Output()
if strings.Contains(string(out), "Destination Host Unreachable") {
fmt.Println("TANGO DOWN")
} else {
fmt.Println("IT ALIVEEE")
}
Нет.
Go не имеет встроенного способа для ping-сервера в стандартной библиотеке. Вам нужно написать код самостоятельно.
Для этого вы можете посмотреть раздел icmp библиотеки golang. И используйте этот список управляющих сообщений, чтобы правильно создать сообщение icmp.
Но имейте в виду, что какой-либо администратор сервера отключает службу ping на своем сервере по соображениям безопасности. Итак, если ваша цель - в конечном счете проверить, находится ли сервер в сети или нет, это не 100% надежный метод.
package main
import (
"fmt"
"os/exec"
)
func main() {
Command := fmt.Sprintf("ping -c 1 10.2.201.174 > /dev/null && echo true || echo false")
output, err := exec.Command("/bin/sh", "-c", Command).Output()
fmt.Print(string(output))
fmt.Print(err)
}