Ai
1 Star 1 Fork 1

pdudo/SampleDNS2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
proxy.go 2.11 KB
一键复制 编辑 原始数据 按行查看 历史
pdudo 提交于 2022-03-12 23:06 +08:00 . 优化CNAME
package DnsServer
import (
"io"
"strconv"
"gitee.com/pdudo/SampleDNS2/db"
"gitee.com/pdudo/SampleDNSTool"
"log"
"net"
//"strconv"
"time"
)
func (user *DnsUser)proxyDNSTCPServer(conn net.Conn ,HeadBuf []byte, buf []byte) {
proxyCli , err := net.DialTCP("tcp",nil,&net.TCPAddr{
IP: net.ParseIP(db.DnsConf.ConfDNS.ProxyDNS),
Port: db.DnsConf.ConfDNS.ProxyDNSPort,
})
if err != nil {
log.Println("Dial TCP proxy error " , err)
return
}
log.Println(user.IP,"connect public dns tcp services")
proxyCli.SetDeadline(time.Now().Add(30 *time.Second))
proxyCli.Write(HeadBuf)
proxyCli.Write(buf)
go io.Copy(conn,proxyCli)
io.Copy(proxyCli,conn)
}
func (user *DnsUser)proxyDNSUDPServer(conn *net.UDPConn,connUDP *net.UDPAddr,buf []byte,dnsInfo SampleDNSTool.DNSInfo) {
// cache
key := "dnsCache" + "_" + dnsInfo.QueryInfo.QNAMEString + "_" + strconv.Itoa(int(dnsInfo.QueryInfo.QTYPE)) + "_" +strconv.Itoa(int(dnsInfo.QueryInfo.QCLASS))
cacheBuf , err := user.getCache(key)
if err == nil {
log.Println(user.IP , "getCache" , "key:" , key , " ok")
// Header ID
for i:=0;i<2;i++ {
cacheBuf[i] = buf[i]
}
_ ,err = conn.WriteToUDP(cacheBuf,connUDP)
if err != nil {
log.Println(user.IP,"proxy server send msg error " , err)
}
return
}
// proxy
log.Println(user.IP," connect public proxy dns server")
// 查询其他记录
proxyDNSCli , err := net.DialUDP("udp",nil,&net.UDPAddr{
IP: net.ParseIP(db.DnsConf.ConfDNS.ProxyDNS),
Port: db.DnsConf.ConfDNS.ProxyDNSPort,
})
proxyDNSCli.SetDeadline(time.Now().Add(time.Second * 30))
log.Println("proxt Conect " , db.DnsConf.ConfDNS.ProxyDNS)
_ , err = proxyDNSCli.Write(buf[:])
if err != nil {
log.Println("to proxy server send msg error " , err)
return
}
newBuf := make([]byte,1024)
n ,_, err := proxyDNSCli.ReadFromUDP(newBuf)
if err != nil {
log.Println(user.IP , "proxy server read from udp error " , err)
}
_ ,err = conn.WriteToUDP(newBuf[:n],connUDP)
if err != nil {
log.Println(user.IP,"proxy server send msg error " , err)
}
if ! user.saveCache(key,newBuf[:n]) {
log.Println(user.IP ," save Cache error ,key: " , key)
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/pdudo/SampleDNS2.git
git@gitee.com:pdudo/SampleDNS2.git
pdudo
SampleDNS2
SampleDNS2
db1acbce03bd

搜索帮助