Skip to content

Commit

Permalink
Probe server address
Browse files Browse the repository at this point in the history
  • Loading branch information
cyp0633 committed Mar 10, 2023
1 parent 68377f8 commit 16f69cb
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 2 deletions.
17 changes: 15 additions & 2 deletions internal/dhcp/auto/auto.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dhcpauto

import (
"fmt"
"os"

"github.com/cyp0633/drcom-go/internal/util"
"github.com/manifoldco/promptui"
Expand All @@ -10,10 +10,23 @@ import (

// Auto 自动生成 DHCP 配置文件
func Auto() {
fmt.Printf("We'll go through some steps to generate configuration automatically.\n")
util.Logger.Info("We'll go through some steps to generate configuration automatically.\nThe first thing is to input your credentials.")
_ = selectVersion()
util.Conf.Username = inputAccount()
util.Conf.Password = inputPassword()

util.Logger.Info("Probing auth server...")
sendProbe()
recvProbe()

// Host part
util.Logger.Info("Gathering host information...")
var err error
util.Conf.Hostname, err = os.Hostname()
if err != nil {
util.Logger.Warn("Get hostname failed, using default value", zap.Error(err))
util.Conf.Hostname = "Drcom"
}
}

// selectVersion 选择 Dr.com 客户端版本
Expand Down
51 changes: 51 additions & 0 deletions internal/dhcp/auto/probe.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package dhcpauto

import (
"encoding/hex"
"net"

"github.com/cyp0633/drcom-go/internal/util"
"go.uber.org/zap"
)

var serverList = []string{"119.39.30.2", "119.39.30.10", "119.39.30.18", "119.39.30.26", "119.39.30.34", "119.39.30.42", "119.39.32.42", "119.39.32.10", "119.39.32.66", "119.39.32.92", "119.39.32.110", "58.20.50.197", "58.20.127.10", "58.20.127.26", "58.20.127.34", "58.20.127.90", "58.20.127.100", "58.20.127.106", "58.20.127.178", "58.20.127.242", "58.20.127.250", "218.104.155.74", "10.255.255.2", "10.255.255.11", "119.39.20.2", "119.39.32.58", "119.39.32.154", "119.39.32.174", "119.39.32.202", "119.39.32.210", "172.17.0.253", "119.39.20.42", "58.20.41.227", "119.39.32.18", "119.39.32.82", "58.20.26.246", "119.39.21.18", "119.39.119.2", "119.39.119.66"}

var conn *net.UDPConn

// 向所有服务器发送探测包,谁回复了就是谁
func sendProbe() {
addr := net.UDPAddr{IP: net.ParseIP(util.CLI.BindIP), Port: 61440}
var err error
conn, err = net.DialUDP("udp", &addr, nil)
if err != nil {
util.Logger.Fatal("Open socket on 61440 failed", zap.Error(err))
}
defer conn.Close()
util.Logger.Debug("Opened socket on 61440")
for _, server := range serverList {
raddr := net.UDPAddr{IP: net.ParseIP(server), Port: 61440}
_, err := conn.WriteToUDP([]byte("\x01\x02\xec\x97\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), &raddr)
if err != nil {
util.Logger.Error("Send pkg to server failed", zap.Error(err))
}
}
}

// 接收探测包的回复
func recvProbe() {
buf := make([]byte, 1024)
n, raddr, err := conn.ReadFromUDP(buf)
if err != nil {
util.Logger.Error("Read from socket failed", zap.Error(err))
}
util.Logger.Debug("Read from socket", zap.String("remote", conn.RemoteAddr().String()), zap.Int("bytes", n), zap.String("data", hex.EncodeToString(buf[:n])))
// check if raddr is in serverList
for _, server := range serverList {
if raddr.IP.String() == server {
util.Conf.Server = server
util.Logger.Debug("Found server", zap.String("server", server))
return
}
}
util.Logger.Error("Server not found", zap.String("fake_server", raddr.IP.String()))
}

0 comments on commit 16f69cb

Please sign in to comment.