mirror of
https://github.com/nadoo/glider.git
synced 2025-02-24 01:45:39 +08:00
dns: optimize code
This commit is contained in:
parent
f3db1980cf
commit
7fda4f8710
19
dns/dns.go
19
dns/dns.go
@ -291,10 +291,7 @@ func (s *DNS) Exchange(reqLen uint16, reqMsg []byte, addr string) (respLen uint1
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsServer := s.DNSServer
|
dnsServer := s.GetServer(query.QNAME)
|
||||||
if !s.Tunnel {
|
|
||||||
dnsServer = s.GetServer(query.QNAME)
|
|
||||||
}
|
|
||||||
|
|
||||||
rc, err := s.dialer.NextDialer(query.QNAME+":53").Dial("tcp", dnsServer)
|
rc, err := s.dialer.NextDialer(query.QNAME+":53").Dial("tcp", dnsServer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -366,13 +363,15 @@ func (s *DNS) SetServer(domain, server string) {
|
|||||||
|
|
||||||
// GetServer .
|
// GetServer .
|
||||||
func (s *DNS) GetServer(domain string) string {
|
func (s *DNS) GetServer(domain string) string {
|
||||||
domainParts := strings.Split(domain, ".")
|
if !s.Tunnel {
|
||||||
length := len(domainParts)
|
domainParts := strings.Split(domain, ".")
|
||||||
for i := length - 2; i >= 0; i-- {
|
length := len(domainParts)
|
||||||
domain := strings.Join(domainParts[i:length], ".")
|
for i := length - 2; i >= 0; i-- {
|
||||||
|
domain := strings.Join(domainParts[i:length], ".")
|
||||||
|
|
||||||
if server, ok := s.DNSServerMap[domain]; ok {
|
if server, ok := s.DNSServerMap[domain]; ok {
|
||||||
return server
|
return server
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,8 +21,8 @@ import (
|
|||||||
// https://github.com/torvalds/linux/blob/9e66317d3c92ddaab330c125dfe9d06eee268aff/include/uapi/linux/netfilter/nfnetlink.h#L56
|
// https://github.com/torvalds/linux/blob/9e66317d3c92ddaab330c125dfe9d06eee268aff/include/uapi/linux/netfilter/nfnetlink.h#L56
|
||||||
const NFNL_SUBSYS_IPSET = 6
|
const NFNL_SUBSYS_IPSET = 6
|
||||||
|
|
||||||
// http://git.netfilter.org/ipset/tree/include/libipset/linux_ip_set.h
|
|
||||||
// IPSET_PROTOCOL The protocol version
|
// IPSET_PROTOCOL The protocol version
|
||||||
|
// http://git.netfilter.org/ipset/tree/include/libipset/linux_ip_set.h
|
||||||
const IPSET_PROTOCOL = 6
|
const IPSET_PROTOCOL = 6
|
||||||
|
|
||||||
// IPSET_MAXNAMELEN The max length of strings including NUL: set and type identifiers
|
// IPSET_MAXNAMELEN The max length of strings including NUL: set and type identifiers
|
||||||
@ -146,6 +146,7 @@ func (m *IPSetManager) AddDomainIP(domain, ip string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateSet create a ipset
|
||||||
func CreateSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
|
func CreateSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
|
||||||
if setName == "" {
|
if setName == "" {
|
||||||
return
|
return
|
||||||
@ -189,6 +190,7 @@ func CreateSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
|
|||||||
FlushSet(fd, lsa, setName)
|
FlushSet(fd, lsa, setName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FlushSet flush a ipset
|
||||||
func FlushSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
|
func FlushSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
|
||||||
log.F("ipset flush %s", setName)
|
log.F("ipset flush %s", setName)
|
||||||
|
|
||||||
@ -206,6 +208,7 @@ func FlushSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddToSet adds an entry to ipset
|
||||||
func AddToSet(fd int, lsa syscall.SockaddrNetlink, setName, entry string) {
|
func AddToSet(fd int, lsa syscall.SockaddrNetlink, setName, entry string) {
|
||||||
if setName == "" {
|
if setName == "" {
|
||||||
return
|
return
|
||||||
@ -280,6 +283,7 @@ func rtaAlignOf(attrlen int) int {
|
|||||||
return (attrlen + syscall.RTA_ALIGNTO - 1) & ^(syscall.RTA_ALIGNTO - 1)
|
return (attrlen + syscall.RTA_ALIGNTO - 1) & ^(syscall.RTA_ALIGNTO - 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetlinkRequestData .
|
||||||
type NetlinkRequestData interface {
|
type NetlinkRequestData interface {
|
||||||
Len() int
|
Len() int
|
||||||
Serialize() []byte
|
Serialize() []byte
|
||||||
@ -291,6 +295,7 @@ type NfGenMsg struct {
|
|||||||
resID uint16
|
resID uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewNfGenMsg .
|
||||||
func NewNfGenMsg(nfgenFamily, version, resID int) *NfGenMsg {
|
func NewNfGenMsg(nfgenFamily, version, resID int) *NfGenMsg {
|
||||||
return &NfGenMsg{
|
return &NfGenMsg{
|
||||||
nfgenFamily: uint8(nfgenFamily),
|
nfgenFamily: uint8(nfgenFamily),
|
||||||
@ -429,6 +434,7 @@ func (req *NetlinkRequest) Serialize() []byte {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddData add data to request
|
||||||
func (req *NetlinkRequest) AddData(data NetlinkRequestData) {
|
func (req *NetlinkRequest) AddData(data NetlinkRequestData) {
|
||||||
if data != nil {
|
if data != nil {
|
||||||
req.Data = append(req.Data, data)
|
req.Data = append(req.Data, data)
|
||||||
@ -442,10 +448,12 @@ func (req *NetlinkRequest) AddRawData(data []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uint8Attr .
|
||||||
func Uint8Attr(v uint8) []byte {
|
func Uint8Attr(v uint8) []byte {
|
||||||
return []byte{byte(v)}
|
return []byte{byte(v)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uint16Attr .
|
||||||
func Uint16Attr(v uint16) []byte {
|
func Uint16Attr(v uint16) []byte {
|
||||||
native := NativeEndian()
|
native := NativeEndian()
|
||||||
bytes := make([]byte, 2)
|
bytes := make([]byte, 2)
|
||||||
@ -453,6 +461,7 @@ func Uint16Attr(v uint16) []byte {
|
|||||||
return bytes
|
return bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uint32Attr .
|
||||||
func Uint32Attr(v uint32) []byte {
|
func Uint32Attr(v uint32) []byte {
|
||||||
native := NativeEndian()
|
native := NativeEndian()
|
||||||
bytes := make([]byte, 4)
|
bytes := make([]byte, 4)
|
||||||
@ -460,6 +469,7 @@ func Uint32Attr(v uint32) []byte {
|
|||||||
return bytes
|
return bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ZeroTerminated .
|
||||||
func ZeroTerminated(s string) []byte {
|
func ZeroTerminated(s string) []byte {
|
||||||
bytes := make([]byte, len(s)+1)
|
bytes := make([]byte, len(s)+1)
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
@ -469,6 +479,7 @@ func ZeroTerminated(s string) []byte {
|
|||||||
return bytes
|
return bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NonZeroTerminated .
|
||||||
func NonZeroTerminated(s string) []byte {
|
func NonZeroTerminated(s string) []byte {
|
||||||
bytes := make([]byte, len(s))
|
bytes := make([]byte, len(s))
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
@ -477,6 +488,7 @@ func NonZeroTerminated(s string) []byte {
|
|||||||
return bytes
|
return bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BytesToString .
|
||||||
func BytesToString(b []byte) string {
|
func BytesToString(b []byte) string {
|
||||||
n := bytes.Index(b, []byte{0})
|
n := bytes.Index(b, []byte{0})
|
||||||
return string(b[:n])
|
return string(b[:n])
|
||||||
|
Loading…
Reference in New Issue
Block a user