Documentation ¶
Index ¶
- Constants
- Variables
- func Available() bool
- func CIDRListAll(cidr string) ([]string, error)
- func CIDRToMask(cidr string) (net.IPMask, error)
- func CidrContainsIP(cidr, ip string) (bool, error)
- func Control(network, address string, c syscall.RawConn) error
- func DecodeURL(encodedUrl string) (string, error)
- func DeleteNetRoute(iface string, addr net.IPNet, address string) error
- func Dial(network, address string) (net.Conn, error)
- func DiscoverGateway() (net.IP, error)
- func EnableBBR(conn *net.TCPConn) error
- func GetAllLANIPv4CIDRs() ([]string, error)
- func GetAllNicNames() ([]string, error)
- func GetAllPrivateIPs() ([]net.IP, error)
- func GetOutboundIP() (net.IP, error)
- func GetPublicIPOL(proxy string) (net.IP, error)
- func GetRandomAvailablePort(nettype string) (int, error)
- func GetRoute(dst net.IP) (iface *net.Interface, gateway net.IP, err error)
- func GlobalEnableBBR() error
- func IsAndOnlyDomain(str string) bool
- func IsAudioUrl(url string) bool
- func IsDomain(domain string) bool
- func IsDomainONLINE(domain string) bool
- func IsFilePath(s string) bool
- func IsIPPortString(s string) bool
- func IsIPString(s string) bool
- func IsImageUrl(url string) bool
- func IsLocalInboundPortClear(nettype string, port int) (bool, error)
- func IsLocalPortUsing(nettype string, port int) (bool, error)
- func IsPrivilegedPort(port int) bool
- func IsRegistrable(domain string) bool
- func IsRemotePortOpen(nettype string, port int) (bool, error)
- func IsUrl(s string) bool
- func IsValidPort(port int) bool
- func IsVideoUrl(url string) bool
- func Join(baseUrl string, relUrl string) (absUrl string, err error)
- func LastPath(urlstr string) string
- func ListenAny(network, addr string) (net.Listener, error)
- func ListenCop(network, addr string) (net.Listener, error)
- func LookupIP(host string) ([]net.IP, error)
- func ParseAddr(addr net.Addr) (IP net.IP, port int, err error)
- func ParseHostAddrOnline(addr string) (IP net.IP, port int, err error)
- func ParseProxyAddr(address string) (proxyType, host string, err error)
- func RemoveDuplicateUrl(urls []string) []string
- func ResolveAddr(network, address string) (net.Addr, error)
- func ReuseDial(network, laddr, raddr string) (net.Conn, error)
- func ReuseDialTimeout(network, laddr, raddr string, timeout time.Duration) (net.Conn, error)
- func ReuseListen(network, address string) (net.Listener, error)
- func ReuseListenPacket(network, address string) (net.PacketConn, error)
- func SetIPForwarding() error
- func SetSystemDNS(interfaces, nameServers []string) error
- func SudoAddNetRoute(iface string, destIPNet net.IPNet, address string) error
- type AddrParser
- type AddrSlice
- type Auth
- type BBRInfo
- type CidrRanger
- type CodecConn
- func (c *CodecConn) Close() error
- func (c *CodecConn) LocalAddr() net.Addr
- func (c *CodecConn) Read(p []byte) (n int, err error)
- func (c *CodecConn) RemoteAddr() net.Addr
- func (c *CodecConn) SetDeadline(t time.Time) error
- func (c *CodecConn) SetReadDeadline(t time.Time) error
- func (c *CodecConn) SetWriteDeadline(t time.Time) error
- func (c *CodecConn) Write(p []byte) (n int, err error)
- type DNSClient
- func (dl *DNSClient) AddCustomDNSServer(host string) error
- func (dl *DNSClient) CleanCustomServers() *DNSClient
- func (dl *DNSClient) LookupAddr(addr string) (names []string, err error)
- func (dl *DNSClient) LookupIP(host string) ([]net.IP, error)
- func (dl *DNSClient) RemoveCustomDNSServer(host, ip string)
- func (dl *DNSClient) UseSysDNSIfNoCustom(use bool) *DNSClient
- type DNSResolver
- type DialFunc
- type DialWithCtxFunc
- type Dialer
- type DialerWithCtx
- type Domain
- type GeoFinder
- type Host
- type IP
- type IPMask
- type IPNet
- func (in IPNet) CidrStyleString() string
- func (in IPNet) Contains(ip net.IP) bool
- func (in IPNet) IsHostType() bool
- func (in IPNet) IsNetType() bool
- func (in IPNet) ListAll() []net.IP
- func (in IPNet) MacStyleString() string
- func (in IPNet) OnlyKeepNet() IPNet
- func (in IPNet) Std() net.IPNet
- func (in IPNet) String() string
- func (in IPNet) Verify() error
- type IPPort
- type Interface
- type IpGeo
- type Listener
- type LookupIPRequiredFunc
- type LookupIPWithCtxFunc
- type MsgConn
- type MultiListener
- type NicAddr
- type NicInfo
- type Path
- type PopConn
- func (c *PopConn) Close() error
- func (c *PopConn) LocalAddr() net.Addr
- func (c *PopConn) Read(b []byte) (int, error)
- func (c *PopConn) RemoteAddr() net.Addr
- func (c *PopConn) SetDeadline(t time.Time) error
- func (c *PopConn) SetReadDeadline(t time.Time) error
- func (c *PopConn) SetWriteDeadline(t time.Time) error
- func (c *PopConn) Write(b []byte) (n int, err error)
- type PopListener
- type RouteRule
- type Scheme
- type Url
- func (u *Url) SetHost(host string) *Url
- func (u *Url) SetPass(pass string) *Url
- func (u *Url) SetPath(paths []string) *Url
- func (u *Url) SetPort(port int) *Url
- func (u *Url) SetProto(proto string) *Url
- func (u *Url) SetQueries(queries map[string]string) *Url
- func (u *Url) SetUser(user string) *Url
- func (u *Url) String() string
- type UrlAuth
- type UrlHost
- type Whois
Constants ¶
const ( /* public schemes */ SchemeUnknown = iota SchemeHttp SchemeHttps SchemeFtp SchemeFtps SchemeMailto SchemeFile SchemeIdap SchemeNews SchemeGopher SchemeTelnet SchemeWais SchemeNntp SchemeData SchemeIrc SchemeIrcs SchemeWorldwind SchemeMms SchemeSocks4 SchemeSocks4a SchemeSocks5 SchemeSocks5s SchemeSocksHttp SchemeSocksHttps /* custom schemes */ SchemeSvn SchemeHg SchemeGit SchemeThunder SchemeTencent SchemeEd2k SchemeMagnet SchemeTwitter )
Variables ¶
var ( // SysDNSResolver uses the system DNS to resolve host names SysDNSResolver = NewDNSClient().CleanCustomServers().UseSysDNSIfNoCustom(true) )
Functions ¶
func Available ¶
func Available() bool
Available returns whether or not SO_REUSEPORT or equivalent behaviour is available in the OS.
func CIDRListAll ¶
List all ip address contained in this cidr
func CIDRToMask ¶
Extracts IP mask from CIDR address.
func CidrContainsIP ¶
func DecodeURL ¶
https://video-icn1-1.xx.fbcdn.net/v/t42.9040-2/58467180_2666273813399564_6679224605468524544_n.mp4?_nc_cat=100\u0026efg=eyJybHIiOjY5NCwicmxhIjo1MTIsInZlbmNvZGVfdGFnIjoic3ZlX3NkIn0=\u0026rl=694\u0026vabr=386\u0026_nc_ht=video-icn1-1.xx\u0026oh=881ead117c700970945a89716b3a0b54\u0026oe=5CB9BAA5
func DeleteNetRoute ¶
DeleteNetRoute removes `net` type route rule from local operating system FIXME 是否需要sudo?
func DiscoverGateway ¶
func EnableBBR ¶
from https://github.com/m-lab/ndt-server/blob/21e2b93bf3ffa5f076b6d5bb70dab7207abc6397/bbr/bbr_linux.go#L17 enableBBR
func GetAllLANIPv4CIDRs ¶
func GetAllNicNames ¶
func GetAllPrivateIPs ¶
GetAllPrivateIPs returns all my local IPs.
func GetOutboundIP ¶
get preferred outbound ip of this machine it will fail if device is not connected to LAN router
func GetPublicIPOL ¶
get my wan IPs by 3rd party service
func GetRandomAvailablePort ¶
func GetRoute ¶
GetRoute returns route info of some specified destination IP, like Interface and gateway. On macOS, this function is the functional equivalent of the `route get $DEST-IP` command.
func GlobalEnableBBR ¶
func GlobalEnableBBR() error
func IsAndOnlyDomain ¶
"http://bing.com/" is domain url, "http://bing.com/search" is not domain url
func IsAudioUrl ¶
func IsDomainONLINE ¶
func IsFilePath ¶
func IsIPPortString ¶
func IsIPString ¶
func IsImageUrl ¶
func IsLocalInboundPortClear ¶
端口是否通畅 如果发起检测端不是你的程序,需要开关端口监听多次才能确定,因为,如果端口可访问,也可能是被映射到别的电脑上而那个电脑的该端口也被监听了
func IsRegistrable ¶
Principle: WHOIS information of domains which are not taken include "No match".
func IsRemotePortOpen ¶
只能检测端口是否正开启,如果未开启,可能是多种原因,比如主机关机、防火墙、端口未映射、端口没有服务在监听等
func IsValidPort ¶
func IsVideoUrl ¶
func Join ¶
Combine absolute path and relative path to get a new absolute path If relUrl is absolute url, returns this relUrl
func ParseHostAddrOnline ¶
"HOSTNAME" / "DOMAIN" / "IP" / ":PORT" / "HOSTNAME:PORT" / "DOMAIN:PORT" / "IP:PORT" -> net.IP, port return port maybe -1, this is NOT an error NOTICE: ResolveIPAddr() & LookupIP() API can't recognize "1127.0.0.1" or "abc127.0.0.1" style illegal IP string, they still returns a IP address and nil error
func ParseProxyAddr ¶
func RemoveDuplicateUrl ¶
func ReuseDial ¶
ReuseDial dials the given network and address. see net.Dial Returns a net.Conn created from a file descriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
func ReuseDialTimeout ¶
ReuseDialTimeout dials the given network and address, with the given timeout. see net.DialTimeout Returns a net.Conn created from a file descriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
func ReuseListen ¶
ReuseListen listens at the given network and address. see net.Listen Returns a net.Listener created from a file discriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
func ReuseListenPacket ¶
func ReuseListenPacket(network, address string) (net.PacketConn, error)
ReuseListenPacket listens at the given network and address. see net.ListenPacket Returns a net.Listener created from a file discriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
func SetIPForwarding ¶
func SetIPForwarding() error
SetIPForwarding - Sets IP forwarding if it's mac or linux
func SetSystemDNS ¶
func SudoAddNetRoute ¶
SudoAddNetRoute adds `net` type route rule to local operating system networksetup -setadditionalroutes Ethernet 192.168.1.0 255.255.255.0 10.0.0.2 persistent address: 不知道干嘛用的
Notice: 1、如果程序进程退出,包括意外退出,通常TUN设备会被系统清除,TUN设备相关的路由也会被系统清除。macOS下亲测如此
Types ¶
type AddrParser ¶
type AddrParser struct {
// contains filtered or unexported fields
}
func NewParser ¶
func NewParser(address_string string) *AddrParser
func (*AddrParser) Scheme ¶
func (ap *AddrParser) Scheme() string
func (*AddrParser) Split ¶
func (ap *AddrParser) Split() (*AddrSlice, error)
func (*AddrParser) Verify ¶
func (ap *AddrParser) Verify() error
type AddrSlice ¶
type AddrSlice struct { Scheme string // like "http", "ftp" Domain Domain // like "google.com" Auth UrlAuth // like "usr:pwd" Host UrlHost // like "google.com:443" Path Path // like "?article=1260&lang=en#comment" }
func ParseUrl ¶
NOTICE url.Parse("192.168.1.1:80") reports error because RFC3986 says "192.168.1.1:80" is an invalid url, the correct way is "//192.168.1.1:80". In gaddr library and urlx library, "192.168.1.1:80" is a valid url because it is used a lot Reference: https://github.com/golang/go/issues/19297
type BBRInfo ¶
type BBRInfo struct { BW int64 // Max-filtered BW (app throughput) estimate in bytes/second MinRTT uint32 // Min-filtered RTT in uSec PacingGain uint32 // Pacing gain shifted left 8 bits CwndGain uint32 // Cwnd gain shifted left 8 bits }
BBRInfo implements the struct associated with INET_DIAG_BBRINFO attribute, corresponding with linux struct tcp_bbr_info in uapi/linux/inet_diag.h. from https://github.com/m-lab/tcp-info/blob/9928ad36d2e5f42c17dad065c98cf1346acc2026/inetdiag/structs.go
type CidrRanger ¶
type CidrRanger struct {
// contains filtered or unexported fields
}
CidrRanger is a fast IP to CIDR lookup.
func NewCidrRanger ¶
func NewCidrRanger() *CidrRanger
type CodecConn ¶
type CodecConn struct {
// contains filtered or unexported fields
}
CodecConn is a generic stream-oriented network connection that can be compressed and decompressed. It implements net.Conn interface. It is used to compress/decompress network connection stream, for example, when transferring log files or JSON files over the Internet, adding a compression algorithm like snappy can greatly improve the efficiency of data transfer.
func NewCodecConn ¶
func NewCodecConn(conn net.Conn, codec io.ReadWriteCloser) *CodecConn
NewCodecConn create CodecConn with original connection and codec io.ReadWriteCloser. Note: you should implement data compress/decompress at `codecReadWriteCloser`
func (*CodecConn) RemoteAddr ¶
RemoteAddr implements net.Conn.
func (*CodecConn) SetDeadline ¶
SetDeadline implements net.Conn.
func (*CodecConn) SetReadDeadline ¶
SetReadDeadline implements net.Conn.
func (*CodecConn) SetWriteDeadline ¶
SetWriteDeadline implements net.Conn.
type DNSClient ¶
func NewDNSClient ¶
func NewDNSClient() *DNSClient
func (*DNSClient) AddCustomDNSServer ¶
AddCustomDNSServer adds new custom DNS server. host samples: Plain: 8.8.8.8:53 Plain: 8.8.4.4:53 Plain: 1.0.0.1:53 Plain: 1.1.1.1:53 DNS-over-TLS: tls://dns.adguard.com DNS-over-HTTPS: https://8.8.8.8/dns-query DNS-over-HTTPS: https://dns.adguard.com/dns-query DNSCrypt-stamp: sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20 DNS-over-QUIC: quic://dns.adguard.com
More public DNS servers: https://github.com/DNSCrypt/dnscrypt-resolvers/blob/master/v3/public-resolvers.md
func (*DNSClient) CleanCustomServers ¶
CleanCustomServers uses the system DNS to resolve host names.
func (*DNSClient) LookupAddr ¶
LookupAddr looks up host names or domains by ip address from DNS server, if no DNS server is set up locally, then a query request will be sent to the default gateway.
func (*DNSClient) RemoveCustomDNSServer ¶
func (*DNSClient) UseSysDNSIfNoCustom ¶
type DNSResolver ¶
type DNSResolver interface { LookupIP(host string) ([]net.IP, error) LookupAddr(addr string) (names []string, err error) }
DNSResolver is used to implement custom name resolution
type DialWithCtxFunc ¶
type DialerWithCtx ¶
type Domain ¶
type Domain struct { TLD string // "com" | "com.cn" SLD_ROOT string // "baidu" TRD_SUB string // "www" SiteDomain string // "baidu.com" }
func ParseDomain ¶
NOTICE This an offline domain parse function, please update source repo often
func ParseONLINE ¶
NOTICE 优点: 从权威网站下载TLD列表,判断结果准确 缺点: 初始化或者更新时必须在线工作,下载期间接口响应慢
type GeoFinder ¶
type GeoFinder struct {
// contains filtered or unexported fields
}
func NewGeoFinderONLINE ¶
type IPMask ¶
IPMask only exists in IPv4, there is no netmask in IPv6.
func MustParseIPMask ¶
func ParseIPMask ¶
ParseIPMask casts string like `255.255.255.0` to IPv4 net mask, IPv6 doesn't need net mask. Subnet Mask represents the Network by defining the Leading Bits as 1’s while the Hosts with Trailing Bits as 0’s. 子网掩码必须以1为前导,以0为尾巴,不可以交叉存在 Invalid mask sample: 255.255.253.0(11111111.11111111.11111101.00000000).
func WrapIPMask ¶
type IPNet ¶
IPNet defines IP network, or IP range. Notice: Valid IPNet samples: 192.168.7.0/24 Invalid IPNet samples: 192.168.7.123/24
func ParseIPNet ¶
ParseIPNet casts string like `192.168.1.3/24` into IPNet.
func WrapIPNetPtr ¶
func (IPNet) CidrStyleString ¶
CidrStyleString returns CIDR format IPNet. IPNet: `192.168.1.2/24` Return: `192.168.1.2/24`
func (IPNet) IsHostType ¶
IsHostType returns if a IPNet is a host ip address. "192.168.3.3/24": true "192.168.3.0/24": false Notice: IPNet ending with `/32` is both a Host type and a Net type.
func (IPNet) IsNetType ¶
IsNetType returns if a IPNet is a network. "192.168.3.0/24": true "192.168.3.3/24": false Notice: IPNet ending with `/32` is both a Host type and a Net type.
func (IPNet) ListAll ¶
ListAll returns all IPs of current IP network. FIXME: IPv6 not supported for now.
func (IPNet) MacStyleString ¶
MacStyleString returns mac style network format IPNet. IPNet: `192.168.1.2/24` Return: `192.168.1` FIXME 需要查资料验证结果是否正确
func (IPNet) OnlyKeepNet ¶
OnlyKeepNet returns pure network format IPNet, drop single host info. IPNet: `192.168.1.2/24` Return: `192.168.1.0/24` FIXME 需要查资料验证结果是否正确
type IPPort ¶
func ParseIPPort ¶
type Interface ¶
func Interfaces ¶
func WrapIfiPtr ¶
func (*Interface) IsBroadcast ¶
func (*Interface) IsLoopBack ¶
func (*Interface) IsMulticast ¶
func (*Interface) IsPointToPoint ¶
type LookupIPRequiredFunc ¶
type LookupIPWithCtxFunc ¶
type MsgConn ¶
func NewMsgConn ¶
type MultiListener ¶
type MultiListener struct {
// contains filtered or unexported fields
}
func NewMultiListener ¶
func NewMultiListener() *MultiListener
NewMultiListener creates new MultiListener.
func (*MultiListener) AddListen ¶
func (ml *MultiListener) AddListen(network, addr string) error
AddListen add new listen address.
func (*MultiListener) Addr ¶
func (ml *MultiListener) Addr() []string
Addr returns all the listener's network address.
func (*MultiListener) Close ¶
func (ml *MultiListener) Close() error
Close closes all the listeners. Any blocked 'Accept' operations will be unblocked and return errors.
func (*MultiListener) CloseOne ¶
func (ml *MultiListener) CloseOne(network, addr string) error
CloseOne closes one listener.
type NicInfo ¶
type NicInfo struct { Name string Desc string MAC string Addrs []NicAddr IsPhysical bool // Is physical network card or virtual network card Flags string MTU int }
func GetNicInfo ¶
type PopConn ¶
PopConn is packet-oriented protocols connection. It implements net.Conn, makes PacketConn used like a net.Conn.
func (*PopConn) RemoteAddr ¶
type PopListener ¶
type PopListener struct {
// contains filtered or unexported fields
}
PopListener is packet-oriented protocols listener. It implements net.Listener, makes PacketConn used like a net.Listener.
func ListenPop ¶
func ListenPop(network, addr string) (*PopListener, error)
func (*PopListener) Addr ¶
func (l *PopListener) Addr() net.Addr
func (*PopListener) Close ¶
func (l *PopListener) Close() error
type RouteRule ¶
type Url ¶
type UrlHost ¶
type UrlHost struct { Domain string // like "163.com" IP string // like "8.8.8.8" Port int // like "443" }
type Whois ¶
type Whois struct { // Query and Host are copied from the Request. // Query string Host string // FetchedAt is the date and time the response was fetched from the server. FetchedAt time.Time // Body contains the raw bytes of the network response (minus HTTP headers). //Body []byte Body string }
Cloned from github.com/domainr/whois Whois response represents a whois response from a server.