golang:CGO实现获取指定网卡的MAC地址

Posted IGuoSJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang:CGO实现获取指定网卡的MAC地址相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	"strings"
)

/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
char mac[32] = "";
int getPermMac(char *ifName)

    struct ifreq ifreq;
    int sock = 0;
    sock = socket(AF_INET,SOCK_STREAM,0);
    if(sock < 0) 
        return 2;
    
    strcpy(ifreq.ifr_name,ifName);
    if(ioctl(sock,SIOCGIFHWADDR,&ifreq) < 0) 
        return 3;
    
    int i = 0;
    for(i = 0; i < 6; i++)
        sprintf(mac + 3*i, "%02X:", (unsigned char)ifreq.ifr_hwaddr.sa_data[i]);
    
    mac[strlen(mac) - 1] = 0;
    return 0;

*/
import "C"

func main() 
	ifName := "eth0"
	ptr := C.CString(ifName)
	retCode := C.getPermMac(ptr)
	if retCode != 0 
		return
	
	var charray []byte
	for i := range C.mac 
		if C.mac[i] != 0 
			charray = append(charray, byte(C.mac[i]))
		
	
	fmt.Println(strings.ToLower(string(charray)))


以上是关于golang:CGO实现获取指定网卡的MAC地址的主要内容,如果未能解决你的问题,请参考以下文章

Java实现获取命令行中获取指定数据

golang cgo 使用总结

golang 跨平台编译

Mac下交叉编译linux golang程序

golang对不同系统的编译

使用golang解析网卡参数