Created
February 9, 2022 07:18
-
-
Save hihanley/1a59a68ed9ea3e5c51dc512534931062 to your computer and use it in GitHub Desktop.
查询出口 IP 的小服务
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"encoding/json" | |
"fmt" | |
"log" | |
"net" | |
"net/http" | |
"sync" | |
"time" | |
) | |
type httpResp struct { | |
IP string | |
Headers []string | |
Timestamp int64 | |
} | |
func httpIP() { | |
var port = "10080" | |
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { | |
log.Println("HTTP request from " + req.RemoteAddr) | |
resp := new(httpResp) | |
resp.IP = req.RemoteAddr | |
for name, headers := range req.Header { | |
for _, h := range headers { | |
resp.Headers = append(resp.Headers, fmt.Sprintf("%v: %v", name, h)) | |
} | |
} | |
resp.Timestamp = time.Now().Unix() | |
jsonData, _ := json.Marshal(resp) | |
w.Write(jsonData) | |
}) | |
log.Println("Listening on " + port) | |
if err := http.ListenAndServe(":"+port, nil); err != nil { | |
log.Fatal("Error listening:", err) | |
} | |
} | |
func socketIP() { | |
var l net.Listener | |
var err error | |
var port = "10088" | |
l, err = net.Listen("tcp", ":"+port) | |
if err != nil { | |
log.Fatal("Error listening:", err) | |
} | |
defer l.Close() | |
log.Println("Listening on " + port) | |
for { | |
conn, err := l.Accept() | |
if err != nil { | |
log.Fatal("Error accepting: ", err) | |
} | |
log.Printf("Received message from %s\n", conn.RemoteAddr()) | |
go func(conn net.Conn) { | |
defer conn.Close() | |
conn.Write([]byte(conn.RemoteAddr().String())) | |
}(conn) | |
} | |
} | |
func main() { | |
var wg sync.WaitGroup | |
wg.Add(1) | |
go func() { | |
defer wg.Done() | |
httpIP() | |
}() | |
wg.Add(1) | |
go func() { | |
defer wg.Done() | |
socketIP() | |
}() | |
wg.Wait() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#path:/lib/systemd/system/ | |
[Unit] | |
Description= | |
After=network.target syslog.target | |
Wants=network.target | |
[Service] | |
Type=simple | |
ExecStart=/opt/ip/ip | |
Restart=always | |
RestartSec=20s | |
#KillSignal=SIGQUIT | |
#TimeoutStopSec=5 | |
KillMode=process | |
PrivateTmp=true | |
StandardOutput=file://opt/ip/systemctl.log | |
StandardError=inherit | |
[Install] | |
WantedBy=multi-user.target |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment