mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-12 14:30:54 +08:00
增加edge-node ip.close IP命令
This commit is contained in:
@@ -25,7 +25,7 @@ func main() {
|
|||||||
Product(teaconst.ProductName).
|
Product(teaconst.ProductName).
|
||||||
Usage(teaconst.ProcessName + " [-v|start|stop|restart|status|quit|test|reload|service|daemon|pprof|accesslog]").
|
Usage(teaconst.ProcessName + " [-v|start|stop|restart|status|quit|test|reload|service|daemon|pprof|accesslog]").
|
||||||
Usage(teaconst.ProcessName + " [trackers|goman|conns|gc]").
|
Usage(teaconst.ProcessName + " [trackers|goman|conns|gc]").
|
||||||
Usage(teaconst.ProcessName + " [ip.drop|ip.reject|ip.remove] IP")
|
Usage(teaconst.ProcessName + " [ip.drop|ip.reject|ip.remove|ip.close] IP")
|
||||||
|
|
||||||
app.On("test", func() {
|
app.On("test", func() {
|
||||||
err := nodes.NewNode().Test()
|
err := nodes.NewNode().Test()
|
||||||
@@ -241,6 +241,38 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
app.On("ip.close", func() {
|
||||||
|
var args = os.Args[2:]
|
||||||
|
if len(args) == 0 {
|
||||||
|
fmt.Println("Usage: edge-node ip.close IP")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var ip = args[0]
|
||||||
|
if len(net.ParseIP(ip)) == 0 {
|
||||||
|
fmt.Println("IP '" + ip + "' is invalid")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("close ip '" + ip)
|
||||||
|
|
||||||
|
var sock = gosock.NewTmpSock(teaconst.ProcessName)
|
||||||
|
reply, err := sock.Send(&gosock.Command{
|
||||||
|
Code: "closeIP",
|
||||||
|
Params: map[string]any{
|
||||||
|
"ip": ip,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[ERROR]" + err.Error())
|
||||||
|
} else {
|
||||||
|
var errString = maps.NewMap(reply.Params).GetString("error")
|
||||||
|
if len(errString) > 0 {
|
||||||
|
fmt.Println("[ERROR]" + errString)
|
||||||
|
} else {
|
||||||
|
fmt.Println("ok")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
app.On("ip.remove", func() {
|
app.On("ip.remove", func() {
|
||||||
var args = os.Args[2:]
|
var args = os.Args[2:]
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
|
|||||||
7
internal/conns/linger.go
Normal file
7
internal/conns/linger.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package conns
|
||||||
|
|
||||||
|
type LingerConn interface {
|
||||||
|
SetLinger(sec int) error
|
||||||
|
}
|
||||||
@@ -102,6 +102,13 @@ func (this *Map) CloseIPConns(ip string) {
|
|||||||
|
|
||||||
if ok {
|
if ok {
|
||||||
for _, conn := range conns {
|
for _, conn := range conns {
|
||||||
|
// 设置Linger
|
||||||
|
lingerConn, isLingerConn := conn.(LingerConn)
|
||||||
|
if isLingerConn {
|
||||||
|
_ = lingerConn.SetLinger(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭
|
||||||
_ = conn.Close()
|
_ = conn.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -923,6 +923,11 @@ func (this *Node) listenSock() error {
|
|||||||
} else {
|
} else {
|
||||||
_ = cmd.ReplyOk()
|
_ = cmd.ReplyOk()
|
||||||
}
|
}
|
||||||
|
case "closeIP":
|
||||||
|
var m = maps.NewMap(cmd.Params)
|
||||||
|
var ip = m.GetString("ip")
|
||||||
|
conns.SharedMap.CloseIPConns(ip)
|
||||||
|
_ = cmd.ReplyOk()
|
||||||
case "removeIP":
|
case "removeIP":
|
||||||
var m = maps.NewMap(cmd.Params)
|
var m = maps.NewMap(cmd.Params)
|
||||||
var ip = m.GetString("ip")
|
var ip = m.GetString("ip")
|
||||||
|
|||||||
Reference in New Issue
Block a user