Documentation ¶
Index ¶
- Constants
- Variables
- func Gateways() []net.IP
- func GetApproximateInternetLocation() (net.IP, error)
- func GetAssignedAddresses() (ipv4 []net.IP, ipv6 []net.IP, err error)
- func GetAssignedGlobalAddresses() (ipv4 []net.IP, ipv6 []net.IP, err error)
- func GetLocalNetwork(ip net.IP) (myNet *net.IPNet, err error)
- func GetNetworkChangedFlag() *utils.Flag
- func IPv6Enabled() bool
- func IsConnectivityDomain(domain string) bool
- func IsMyIP(ip net.IP) (yes bool, err error)
- func ListenToICMP(targetIP net.IP) (packets chan packet.Packet, done func())
- func Online() bool
- func ReportFailedConnection()
- func ReportSuccessfulConnection()
- func SetLocalAddrFactory(laf func(network string) net.Addr)
- func SubmitPacketToICMPListener(pkt packet.Packet) (submitted bool)
- type CaptivePortal
- type DeviceLocation
- type DeviceLocationSource
- type DeviceLocations
- func (dls *DeviceLocations) AddIP(ip net.IP, source DeviceLocationSource) (dl *DeviceLocation, ok bool)
- func (dls *DeviceLocations) AddLocation(dl *DeviceLocation)
- func (dls *DeviceLocations) Best() *DeviceLocation
- func (dls *DeviceLocations) BestV4() *DeviceLocation
- func (dls *DeviceLocations) BestV6() *DeviceLocation
- func (dls *DeviceLocations) Copy() *DeviceLocations
- type Nameserver
- type OnlineStatus
Constants ¶
const ( ModuleName = "netenv" NetworkChangedEvent = "network changed" OnlineStatusChangedEvent = "online status changed" )
Event Names.
Variables ¶
var ( PortalTestIP = net.IPv4(192, 0, 2, 1) PortalTestURL = fmt.Sprintf("http://%s/", PortalTestIP) DNSTestDomain = "online-check.safing.io." DNSTestExpectedIP = net.IPv4(0, 65, 67, 75) // Ascii: \0ACK DNSTestQueryFunc func(ctx context.Context, fdqn string) (ips []net.IP, ok bool, err error) ConnectedToSPN = abool.New() ConnectedToDNS = abool.New() // SpecialCaptivePortalDomain is the domain name used to point to the detected captive portal IP // or the captive portal test IP. The default value should be overridden by the resolver package, // which defines the custom internal domain name to use. SpecialCaptivePortalDomain = "captiveportal.invalid." // ConnectivityDomains holds all connectivity domains. This slice must not be modified. ConnectivityDomains = []string{ SpecialCaptivePortalDomain, "dns.msftncsi.com.", "msftncsi.com.", "www.msftncsi.com.", "microsoftconnecttest.com.", "www.microsoftconnecttest.com.", "ipv6.microsoftconnecttest.com.", "captive.apple.com.", "connectivity-check.ubuntu.com.", "nmcheck.gnome.org.", "network-test.debian.org.", "204.pop-os.org.", "conncheck.opensuse.org.", "connectivitycheck.gstatic.com.", "neverssl.com.", "detectportal.firefox.com.", } )
Online Status and Resolver.
Functions ¶
func GetApproximateInternetLocation ¶
GetApproximateInternetLocation returns the approximate Internet location. Deprecated: Please use GetInternetLocation instead.
func GetAssignedAddresses ¶
GetAssignedAddresses returns the assigned IPv4 and IPv6 addresses of the host.
func GetAssignedGlobalAddresses ¶
GetAssignedGlobalAddresses returns the assigned global IPv4 and IPv6 addresses of the host.
func GetLocalNetwork ¶ added in v0.8.13
GetLocalNetwork uses the given IP to search for a network configured on the device and returns it.
func GetNetworkChangedFlag ¶ added in v0.6.9
GetNetworkChangedFlag returns a flag to be notified about a network change.
func IPv6Enabled ¶ added in v0.9.0
func IPv6Enabled() bool
IPv6Enabled returns whether the device has an active IPv6 stack. This is only checked once on startup in order to maintain consistency.
func IsConnectivityDomain ¶ added in v0.4.12
IsConnectivityDomain checks whether the given domain (fqdn) is used for any connectivity related network connections and should always be resolved using the network assigned DNS server.
func IsMyIP ¶ added in v0.5.2
IsMyIP returns whether the given unicast IP is currently configured on the local host. Broadcast or multicast addresses will never match, even if valid and in use. Function is optimized with the assumption that is likely that the IP is mine.
func ListenToICMP ¶ added in v0.6.9
ListenToICMP returns a new channel for listenting to icmp packets. Please note that any icmp packet will be passed and filtering must be done on the side of the caller. The caller must call the returned done function when done with the listener.
func Online ¶
func Online() bool
Online returns true if online status is either SemiOnline or Online.
func ReportFailedConnection ¶
func ReportFailedConnection()
ReportFailedConnection hints the online status monitoring system that a connection attempt has failed. This function has extremely low overhead and may be called as much as wanted.
func ReportSuccessfulConnection ¶
func ReportSuccessfulConnection()
ReportSuccessfulConnection hints the online status monitoring system that a connection attempt was successful.
func SetLocalAddrFactory ¶
SetLocalAddrFactory supplies the environment package with a function to get permitted local addresses for connections.
func SubmitPacketToICMPListener ¶ added in v0.6.9
SubmitPacketToICMPListener checks if an ICMP packet should be submitted to the listener. If so, it is submitted right away. The function returns whether or not the packet should be submitted, not if it was successful.
Types ¶
type CaptivePortal ¶ added in v0.4.12
CaptivePortal holds information about a detected captive portal.
func GetCaptivePortal ¶ added in v0.4.12
func GetCaptivePortal() *CaptivePortal
GetCaptivePortal returns the current captive portal. The returned struct must not be edited.
type DeviceLocation ¶ added in v0.6.9
type DeviceLocation struct { IP net.IP IPVersion packet.IPVersion Location *geoip.Location Source DeviceLocationSource SourceAccuracy int }
DeviceLocation represents a single IP and metadata. It must not be changed once created.
func SetInternetLocation ¶ added in v0.6.9
func SetInternetLocation(ip net.IP, source DeviceLocationSource) (dl *DeviceLocation, ok bool)
SetInternetLocation provides the location management system with a possible Internet location.
func (*DeviceLocation) IsMoreAccurateThan ¶ added in v0.6.9
func (dl *DeviceLocation) IsMoreAccurateThan(other *DeviceLocation) bool
IsMoreAccurateThan checks if the device location is more accurate than the given one.
func (*DeviceLocation) LocationOrNil ¶ added in v0.7.0
func (dl *DeviceLocation) LocationOrNil() *geoip.Location
LocationOrNil or returns the geoip location, or nil if not present.
func (*DeviceLocation) String ¶ added in v0.7.0
func (dl *DeviceLocation) String() string
type DeviceLocationSource ¶ added in v0.6.9
type DeviceLocationSource string
DeviceLocationSource is a location source.
const ( SourceInterface DeviceLocationSource = "interface" SourcePeer DeviceLocationSource = "peer" SourceUPNP DeviceLocationSource = "upnp" SourceTraceroute DeviceLocationSource = "traceroute" SourceTimezone DeviceLocationSource = "timezone" SourceOther DeviceLocationSource = "other" )
Location Sources.
func (DeviceLocationSource) Accuracy ¶ added in v0.6.9
func (dls DeviceLocationSource) Accuracy() int
Accuracy returns the location accuracy of the source.
type DeviceLocations ¶ added in v0.6.9
type DeviceLocations struct {
All []*DeviceLocation
}
DeviceLocations holds multiple device locations.
func GetInternetLocation ¶ added in v0.6.9
func GetInternetLocation() (deviceLocations *DeviceLocations, ok bool)
GetInternetLocation returns the possible device locations.
func (*DeviceLocations) AddIP ¶ added in v0.9.0
func (dls *DeviceLocations) AddIP(ip net.IP, source DeviceLocationSource) (dl *DeviceLocation, ok bool)
AddIP adds a new location based on the given IP.
func (*DeviceLocations) AddLocation ¶ added in v0.9.0
func (dls *DeviceLocations) AddLocation(dl *DeviceLocation)
AddLocation adds a location.
func (*DeviceLocations) Best ¶ added in v0.6.9
func (dls *DeviceLocations) Best() *DeviceLocation
Best returns the best (most accurate) device location.
func (*DeviceLocations) BestV4 ¶ added in v0.7.0
func (dls *DeviceLocations) BestV4() *DeviceLocation
BestV4 returns the best (most accurate) IPv4 device location.
func (*DeviceLocations) BestV6 ¶ added in v0.7.0
func (dls *DeviceLocations) BestV6() *DeviceLocation
BestV6 returns the best (most accurate) IPv6 device location.
func (*DeviceLocations) Copy ¶ added in v0.9.0
func (dls *DeviceLocations) Copy() *DeviceLocations
Copy creates a copy of the locations, but not the individual entries.
type Nameserver ¶
Nameserver describes a system assigned namserver.
func Nameservers ¶
func Nameservers() []Nameserver
Nameservers returns the currently active nameservers.
type OnlineStatus ¶
type OnlineStatus uint8
OnlineStatus represent a state of connectivity to the Internet.
const ( StatusUnknown OnlineStatus = 0 StatusOffline OnlineStatus = 1 StatusLimited OnlineStatus = 2 // local network only StatusPortal OnlineStatus = 3 // there seems to be an internet connection, but we are being intercepted, possibly by a captive portal StatusSemiOnline OnlineStatus = 4 // we seem to online, but without full connectivity StatusOnline OnlineStatus = 5 )
Online Status Values.
func CheckAndGetOnlineStatus ¶
func CheckAndGetOnlineStatus() OnlineStatus
CheckAndGetOnlineStatus triggers a new online status check and returns the result.
func GetOnlineStatus ¶
func GetOnlineStatus() OnlineStatus
GetOnlineStatus returns the current online stats.
func (OnlineStatus) String ¶
func (os OnlineStatus) String() string