Go获取Windows的网卡IO.
2015-10-21 15:25
549 查看
package main import ( "fmt" "github.com/axgle/mahonia" "github.com/shirou/gopsutil/net" nnet "net" "os" "os/exec" "strings" "time" ) var debug string func main() { if len(os.Args) != 3 && len(os.Args) != 4 { fmt.Println("Args error ...") return } R_name := strings.ToUpper(os.Args[1]) I_name := strings.ToUpper(os.Args[2]) if len(os.Args) == 4 { debug = os.Args[3] } var addr string lis, _ := nnet.Interfaces() for _, v := range lis { if strings.ToUpper(v.Name) == R_name { addr = v.HardwareAddr.String() } if debug == "true" { fmt.Println(v) } } if len(addr) == 0 { addr = cmd_get_mac(R_name) if len(addr) < 2 { return } } var num []uint64 = make([]uint64, 2) for i := 0; i < 2; i++ { Netio, err := net.NetIOCounters(true) if err != nil { fmt.Println(err) return } for _, v := range Netio { if debug == "true" { fmt.Printf("HardWare Addr :%s\n%s\n", addr, nnet.HardwareAddr(v.Addr[:8]).String()) fmt.Println(v) } if strings.Contains(nnet.HardwareAddr(v.Addr[:8]).String(), addr) { switch I_name { case "IN": num[i] = v.BytesRecv case "OUT": num[i] = v.BytesSent } } } if i == 1 { break } time.Sleep(5e9) } if debug == "true" { fmt.Println(num) } fmt.Print((num[1] - num[0]) / 5.00) } func cmd_get_mac(name string) string { cmd := exec.Command("getmac", "/FO", "csv", "/v", "/NH") buf, err := cmd.Output() if err != nil { if debug == "true" { fmt.Println(err) } return "" } s := mahonia.NewDecoder("gb18030").ConvertString(string(buf)) for _, v := range strings.Split(s, "\n") { if strings.Contains(v, name) { hwaddr, err := nnet.ParseMAC(split(v)) if err != nil && debug == "true" { fmt.Println(err) continue } return hwaddr.String() } } return "" } func split(s string) string { lis := strings.Split(s, ",") if len(lis) < 3 { return "" } return strings.Trim(lis[2], `"`) }
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- Go 语言 Channel 实现原理精要
- Go语言将支持Android
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制
- Windows XP最新应用技巧大荟萃
- Windows 系统组策略应用全攻略(上)第1/2页