11package client
22
33import (
4- "fmt "
5- "net "
4+ "github.com/go-ping/ping "
5+ "log "
66 "sync"
77 "time"
88)
99
10- var lostPacket10086 = newLostPacket (PingPacketHistoryLen )
11- var lostPacket10010 = newLostPacket (PingPacketHistoryLen )
12- var lostPacket189 = newLostPacket (PingPacketHistoryLen )
10+ var CmLostPacket = newLostPacket (PingPacketHistoryLen ) // 移动
11+ var CuLostPacket = newLostPacket (PingPacketHistoryLen ) // 联通
12+ var CtLostPacket = newLostPacket (PingPacketHistoryLen ) // 电信
1313var pingHost = sync.Map {}
1414
1515func init () {
16- pingHost .Store ("10010 " , PingCu )
17- pingHost .Store ("10086 " , PingCm )
18- pingHost .Store ("189 " , PingCt )
16+ pingHost .Store ("cu " , PingCu )
17+ pingHost .Store ("cm " , PingCm )
18+ pingHost .Store ("ct " , PingCt )
1919}
2020
2121func (c * Client ) getPingTime (host string ) uint {
@@ -32,54 +32,68 @@ func (c *Client) startPing() {
3232
3333 for range time .Tick (timeout ) {
3434 pingHost .Range (func (k , v interface {}) bool {
35- var ip * net.IPAddr
3635 var lost * lostPacket
3736
3837 host := k .(string )
3938 domain := v .(string )
4039
41- if c .Protocol == DefaultProtocol {
42- ip , _ = net .ResolveIPAddr (DefaultProtocol , domain )
40+ if host == "cm" {
41+ lost = & CmLostPacket
42+ } else if host == "cu" {
43+ lost = & CuLostPacket
44+ } else if host == "ct" {
45+ lost = & CtLostPacket
4346 } else {
44- ip , _ = net . ResolveIPAddr ( "ip6" , domain )
47+ return false
4548 }
4649
47- if host == "10086" {
48- lost = & lostPacket10086
49- } else if host == "10010" {
50- lost = & lostPacket10010
51- } else {
52- lost = & lostPacket189
50+ pinger , err := ping .NewPinger (domain )
51+ if err != nil {
52+
53+ log .Println (err .Error ())
54+ return false
5355 }
5456
55- var start = time .Now ()
56- dial , err := net .DialTimeout ("tcp" , fmt .Sprintf ("%s:%d" , ip , ProbePort ), timeout )
57- if err == nil {
58- _ = dial .Close ()
57+ pinger .Timeout = timeout
58+ pinger .Count = 1
59+ pinger .SetPrivileged (true )
5960
60- lost . Push ( false )
61- c . pingTime . Store ( host , uint ( time . Now (). Sub ( start ). Milliseconds ()) )
61+ if c . Protocol == DefaultProtocol {
62+ pinger . SetNetwork ( "ipv4" )
6263 } else {
64+ pinger .SetNetwork ("ipv6" )
65+ }
66+
67+ err = pinger .Run ()
68+ if err != nil {
6369 lost .Push (true )
70+
71+ log .Println (err .Error ())
72+ return false
6473 }
6574
75+ stat := pinger .Statistics ()
76+
77+ lost .Push (false )
78+ c .pingTime .Store (host , uint (stat .AvgRtt / time .Millisecond ))
79+
6680 return true
6781 })
6882 }
6983}
7084
71- func (c * Client ) getLostPacket (host string ) float64 {
72- if host == "10086 " {
85+ func (c * Client ) getLostPacket (isp string ) float64 {
86+ if isp == "cm " {
7387
74- return lostPacket10086 .Get ()
88+ return CmLostPacket .Get ()
7589 }
76- if host == "10010 " {
90+ if isp == "cu " {
7791
78- return lostPacket10010 .Get ()
92+ return CuLostPacket .Get ()
7993 }
80- if host == "189 " {
94+ if isp == "ct " {
8195
82- return lostPacket189 .Get ()
96+ return CtLostPacket .Get ()
8397 }
8498
8599 return 0
0 commit comments