2015-08-07 33 views
6

Làm cách nào để bạn ping địa chỉ IP từ ứng dụng golang? Mục tiêu cuối cùng là kiểm tra xem máy chủ có trực tuyến hay không.Cách ping địa chỉ IP trong golang

Không có cách nào trong thư viện chuẩn để triển khai ping mạng?

+0

việc kiểm tra này https://gist.github.com/kenshinx/5796276 – Bacon

+2

https://godoc.org/golang.org/x/net/icmp –

+0

@ Jonathon-Reinhart Cảm ơn ! Tôi sẽ xem xét ICMP Tôi ước mình có thể đánh dấu các bình luận là câu trả lời. –

Trả lời

7

Như @desaipath đề cập, không có cách nào để thực hiện việc này trong thư viện chuẩn. Tuy nhiên, bạn không cần phải viết mã cho chính mình - nó đã được thực hiện:

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

Note, gửi các gói tin ICMP đòi hỏi quyền root

+0

Tôi thực sự đã tìm thấy điều này sau này sau khi đặt câu hỏi này, nhưng cảm ơn bạn đã thêm nó! –

2

số

Go không có bất kỳ cách built-in để ping một máy chủ trong thư viện chuẩn. Bạn cần tự viết mã.

Để làm điều đó, bạn có thể xem icmp section of golang library. Và sử dụng this list of control messages để tạo thông báo icmp đúng cách.

Tuy nhiên, hãy nhớ rằng một số quản trị viên máy chủ tắt dịch vụ ping trên máy chủ của họ, vì lý do bảo mật . Vì vậy, nếu mục tiêu của bạn là cuối cùng kiểm tra xem máy chủ có trực tuyến hay không, đây không phải là phương pháp đáng tin cậy 100%.

+0

Bạn sẽ đề xuất điều gì? –

+0

@JustDevInc Máy chủ có thuộc quyền kiểm soát của bạn (hoặc của công ty) không? Nếu có, thì ICMP echo không phải là cách tốt nhất để đi, như được mô tả trong câu trả lời [this] (http://security.stackexchange.com/questions/4440/security-risk-of-ping). Cách tốt hơn là có một điểm cuối http trên máy chủ, đáp ứng yêu cầu của bạn. – desaiparth

+0

Được rồi, cảm ơn, xin lỗi vì đã trả lời muộn. –

1

tôi cần cùng như bạn và tôi đã thực hiện một giải pháp thay thế (với exec.Command) cho Raspberry Pi của tôi để kiểm tra xem các máy chủ có trực tuyến hay không. Đây là mã thử nghiệm

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'S ALIVEEE") 
} 
Các vấn đề liên quan