This commit is contained in:
lzx
2026-01-04 13:57:08 +08:00
parent 68b00962d3
commit f08ad364d9
18 changed files with 408 additions and 136 deletions

View File

@@ -0,0 +1,5 @@
[url]
# 消息进来的端口,即监听端口
in=:21000
# 消息发出去的端口,即转发端口
out=stratum+tcp://nexa.m2pool.com:33333

View File

@@ -0,0 +1,80 @@
package main
import (
"io"
"log"
"net"
"os"
"strings"
"gopkg.in/ini.v1"
)
func readConfig() (string, string) {
cfg, err := ini.Load("config.conf")
if err != nil {
log.Fatalf("无法读取配置文件: %v", err)
os.Exit(1)
}
section := cfg.Section("url")
minerPort := strings.Trim(section.Key("in").String(), `""`)
minerPoolAddr := strings.Trim(section.Key("out").String(), `""`)
return minerPort, minerPoolAddr
}
var minerPort, minerPoolAddr = readConfig()
// 处理矿机请求的函数
func handleMinerConnection(minerConn net.Conn) {
defer minerConn.Close()
log.Println("有矿机接入")
// 连接到矿池
poolConn, err := net.Dial("tcp", minerPoolAddr)
if err != nil {
log.Printf("无法连接到矿池: %v", err)
return
}
defer poolConn.Close()
// 启动两个 goroutine一个从矿机接收数据并转发到矿池另一个从矿池接收数据并转发回矿机
go transferData(minerConn, poolConn)
go transferData(poolConn, minerConn)
// 保持服务运行,直到矿机或矿池关闭连接
select {}
}
// 数据转发函数:从源连接读取数据并写入到目标连接
func transferData(src net.Conn, dest net.Conn) {
_, err := io.Copy(dest, src)
if err != nil {
log.Printf("数据转发失败: %v", err)
}
}
func main() {
// 设置代理服务监听端口
listener, err := net.Listen("tcp", minerPort)
if err != nil {
log.Fatalf("无法启动监听服务: %v", err)
os.Exit(1)
}
defer listener.Close()
log.Printf("代理服务启动,监听端口 %s\n", minerPort)
// 不断接收来自矿机的连接
for {
// 接受矿机连接
minerConn, err := listener.Accept()
if err != nil {
log.Printf("接受连接失败: %v", err)
continue
}
// 为每个矿机连接启动一个新的 goroutine 来处理
go handleMinerConnection(minerConn)
}
}