ExternalIps fetches external Ips from ipcheck(-v6).hideservers.net
( ctx context.Context, routeFn func( bool, net.IP ) error )
| 362 | func ( c *Client ) ExternalIps( ctx context.Context, routeFn func( bool, net.IP ) error, ipv4Func, ipv6Func func( ip net.IP ) ) ( err error ) { |
| 363 | c.Config.Port, c.Config.CA = 80, "" |
| 364 | var buf []byte |
| 365 | |
| 366 | if err = c.Init(); err != nil { log.Println( "ExIp: [ERR] REST Client setup failed:", err ); return } |
| 367 | c.authorizedPins = nil |
| 368 | c.client.Transport.(*http.Transport).Protocols.SetHTTP1( true ) |
| 369 | c.client.Transport.(*http.Transport).Protocols.SetHTTP2( true ) |
| 370 | |
| 371 | exIpFunc := func( name string, callback func( ip net.IP ) ) { |
| 372 | c.Config.Host, c.client.Transport.(*http.Transport).TLSClientConfig.ServerName = name, name |
| 373 | if err = c.Resolve( ctx ); err != nil { log.Println( "ExIp: [ERR] DNS failed:", err ); return } |
| 374 | if err = routeFn( true, c.Remote().IP ); err != nil { log.Println( "ExIp: [ERR] Route", c.Remote().IP, "failed:", err ); return } |
| 375 | buf, _, err = c.get( ctx, "http://" + c.remote.String() ) |
| 376 | _ = routeFn( false, c.Remote().IP ) |
| 377 | if err != nil { log.Println( "ExIp: [ERR] Get http://" + c.Config.Host + " failed" ); return } |
| 378 | callback( net.ParseIP( string(buf) ) ) |
| 379 | return |
| 380 | } |
| 381 | |
| 382 | exIpFunc( "ipcheck.hideservers.net", ipv4Func ) |
| 383 | exIpFunc( "ipcheck-v6.hideservers.net", ipv6Func ) |
| 384 | return nil |
| 385 | } |