Skip to content

Instantly share code, notes, and snippets.

@hihanley
Created February 9, 2022 07:18
Show Gist options
  • Save hihanley/1a59a68ed9ea3e5c51dc512534931062 to your computer and use it in GitHub Desktop.
Save hihanley/1a59a68ed9ea3e5c51dc512534931062 to your computer and use it in GitHub Desktop.
查询出口 IP 的小服务
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()
}
#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