go中引用socket库 ws2_32

#cgo windows,amd64 LDFLAGS: -lWS2_32



引用的C头部添加上面这个  写个例子


package main
/*
#cgo windows,amd64 LDFLAGS:  -lWS2_32
#include <windows.h>
#include <stdio.h>
#include "define.h"
#include <windows.h>
#define host "127.0.0.1"
#define port 5556
#pragma comment(lib, "ws2_32.lib")
void socket_def(SOCKET *sock, char *host_t, int port_t)
{
    WSADATA wsaData;
    struct sockaddr_in saddr;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        printf("error");
    }
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(port_t);
    saddr.sin_addr.s_addr = inet_addr(host_t);
    *sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (*sock == INVALID_SOCKET)
    {
        printf("socket initialize failed: %d/n", WSAGetLastError());
    }

}

int  get_process_info()
{
    HANDLE        hDevice;
    int        status;
    HANDLE        m_hCommEvent;
    ULONG        dwReturn;
    char        outbuf[255];
    CHECKLIST    CheckList;

    SOCKET sock;
   WSADATA wsaData;
    struct sockaddr_in saddr;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        printf("error");
    }
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(port_t);
    saddr.sin_addr.s_addr = inet_addr(host_t);
    sock = socket(AF_INET, SOCK_DGRAM, 0);
    hDevice = NULL;
    m_hCommEvent = NULL;
    hDevice = CreateFile("\\\\.\\MyEvent",
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    if (hDevice == INVALID_HANDLE_VALUE)
    {
        printf("createfile wrong\n");
        getchar();
        return 0;
    }

    m_hCommEvent = CreateEvent(NULL,
        0,
        0,
        NULL);
    printf("hEvent:%08x\n", m_hCommEvent);

    status = DeviceIoControl(hDevice,
        IOCTL_PASSEVENT,
        &m_hCommEvent,
        sizeof(m_hCommEvent),
        NULL,
        0,
        &dwReturn,
        NULL);
    if (!status)
    {
        printf("IO wrong+%d\n", GetLastError());
        getchar();
        return 0;
    }

    CheckList.ONLYSHOWREMOTETHREAD = TRUE;
    CheckList.SHOWTHREAD = TRUE;
    CheckList.SHOWTERMINATETHREAD = FALSE;
    CheckList.SHOWTERMINATEPROCESS = FALSE;
    status = DeviceIoControl(hDevice,
        IOCTL_PASSEVSTRUCT,
        &CheckList,
        sizeof(CheckList),
        NULL,
        0,
        &dwReturn,
        NULL);
    if (!status)
    {
        printf("IO wrong+%d\n", GetLastError());
        getchar();
        return 0;
    }

    printf("      [Process Name]    [PID]    [TID]    [Parent Process Name]    [PID]    [TID]\n");
    while (1)
    {
        ResetEvent(m_hCommEvent);
        WaitForSingleObject(m_hCommEvent, INFINITE);
        status = DeviceIoControl(hDevice,
            IOCTL_PASSBUF,
            NULL,
            0,
            &outbuf,
            sizeof(outbuf),
            &dwReturn,
            NULL);
        if (!status)
        {
            printf("IO wrong+%d\n", GetLastError());
            getchar();
            return 0;
        }
        printf("%s", outbuf);
        sendto(sock,outbuf,strlen(outbuf),0,(struct sockaddr *)&saddr,sizeof(saddr));


    }

    status = DeviceIoControl(hDevice,
        IOCTL_UNPASSEVENT,
        NULL,
        0,
        NULL,
        0,
        &dwReturn,
        NULL);
    if (!status)
    {
        printf("UNPASSEVENT wrong+%d\n", GetLastError());
        getchar();
        return 0;
    }

    status = CloseHandle(hDevice);
    status = CloseHandle(m_hCommEvent);
    getchar();
    return 0;
}
*/
import "C"
import (
	"net"
	"fmt"
)
func main() {

	C.get_process_info()

	var localaddress,_=net.ResolveUDPAddr("udp",":5556")
	var udplistener,err=net.ListenUDP("udp",localaddress)
	if err!=nil{
		fmt.Print("error")
		return
	}
	defer  func(){

		udplistener.Close()
	}()

     var buf[255]byte
	n,_,err:=udplistener.ReadFromUDP(buf[0:])
	if err!=nil{
		fmt.Print("dd")
		return
	}
	fmt.Print(string(buf[0:n]))
}

监听到进程启动通过socket发送给指定的端口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值