Как выполнить IP-адрес в golang

Как вы можете выполнить ping IP-адрес из приложения golang? Конечная цель - проверить, находится ли сервер в сети.

Есть ли способ в стандартной библиотеке реализовать сетевой пинг?

Ответ 1

Как упоминает @desaipath, в стандартной библиотеке нет способа сделать это. Однако вам не нужно писать код для себя - это уже сделано:

https://github.com/tatsushid/go-fastping

Примечание. Для отправки ICMP-пакетов требуются привилегии root

Ответ 2

Мне нужно было то же самое, что и вы, и я сделал обходной путь (с 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")
}

Ответ 3

Нет.

Go не имеет встроенного способа для ping-сервера в стандартной библиотеке. Вам нужно написать код самостоятельно.

Для этого вы можете посмотреть раздел icmp библиотеки golang. И используйте этот список управляющих сообщений, чтобы правильно создать сообщение icmp.

Но имейте в виду, что какой-либо администратор сервера отключает службу ping на своем сервере по соображениям безопасности. Итак, если ваша цель - в конечном счете проверить, находится ли сервер в сети или нет, это не 100% надежный метод.

Ответ 4

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)
}