前阵子有个需求是使用 golang 抓包改包,我用到了 gopacket 这个包,但是出了一些小问题。

我按照网上的方法进行使用 OpenLive 抓包,发现并不行,报错 error open adapter 啥啥啥。

经过调试发现根本找不到这个网卡,需要用 \Device\NPF_ 开头的网卡设备名,我去看了 scapy 的实现,发现使用的是 winpcap/npcap 驱动的 pcap_findalldevs 这个方法,我去 gopacket 里面找了下,发现有个方法 pcap.FindAllDevs() 可以得到所有的网卡信息。

但是用这个方法得到的数据里面的 windows 自带的网卡的 Description 描述字段上就只有个 microsoft,压根不知道是什么东西,结合 net.interifaces() 方法中的 ip 与之前得到的数据对应起来,得到了一个简陋的方案

直接上代码

package main

import (
"fmt"
"log"
"net" "github.com/google/gopacket/pcap"
) type IfaceInfo struct {
NPFName string
Description string
NickName string
IPv4 string
} func get_if_list() []IfaceInfo {
var ifaceInfoList []IfaceInfo // 得到所有的(网络)设备
devices, err := pcap.FindAllDevs()
if err != nil {
log.Fatal(err)
} interface_list, err := net.Interfaces()
if err != nil {
log.Fatal(err)
} for _, i := range interface_list {
byName, err := net.InterfaceByName(i.Name)
if err != nil {
log.Fatal(err)
}
address, err := byName.Addrs()
ifaceInfoList = append(ifaceInfoList, IfaceInfo{NickName: byName.Name, IPv4: address[1].String()})
} // 打印设备信息
// fmt.Println("Devices found:")
// for _, device := range devices {
// fmt.Println("\nName: ", device.Name)
// fmt.Println("Description: ", device.Description)
// fmt.Println("Devices addresses: ", device.Description)
// for _, address := range device.Addresses {
// fmt.Println("- IP address: ", address.IP)
// fmt.Println("- Subnet mask: ", address.Netmask)
// }
// }
var vaildIfaces []IfaceInfo
for _, device := range devices {
for _, address := range device.Addresses {
for _, ifaceinfo := range ifaceInfoList {
if strings.Contains(ifaceinfo.IPv4, address.IP.String()) {
vaildIfaces = append(vaildIfaces, IfaceInfo{NPFName: device.Name, Description: device.Description, NickName: ifaceinfo.NickName, IPv4: ifaceinfo.IPv4})
break
}
}
}
} return vaildIfaces
} func main() {
fmt.Println(get_if_list())
}

最新文章

  1. phpcms 服务器安全认证错误
  2. python 中文乱码问题
  3. js 操作ASP.NET服务器控件
  4. qt button以及label实现不规则图形(五种方法:使用QSS,设置Mask图片,自己画)
  5. TortoiseGit - Gitblit使用简介
  6. [BZOJ 4417][Shoi2013]超级跳马
  7. 百度java开发面试题
  8. C语言的3种参数传递方式
  9. Kotlin 随笔小计
  10. 支持Linux,嗅探和注入功能的网卡
  11. 下载、安装JDK并配置JDK的环境变量
  12. 运用kmp算法解决的一些问题的简单题解
  13. The Twelve-Factor Container
  14. luogu4182 [USACO18JAN] Lifeguards P (单调队列优化dp)
  15. Remmina剪切板不正常的问题
  16. 学习 rostopic
  17. 0004python中的map,reduce,lambda,filter
  18. English trip -- 国际音标表
  19. linux系统下安装两个或多个tomcat
  20. NOIP2011

热门文章

  1. Mitmproxy的mimdump mimproxy mitmweb命令行性能对比
  2. 第2课第2节_Java面向对象编程_封装性_P【学习笔记】
  3. Win10下轻松安装centos7.0(推荐)
  4. Hive的配置详解和日常维护
  5. Tosca case status PLANNED,IN-WORK,COMPLETED 对应的图标
  6. [转]EXCEL截取字符串中某几位的函数——LeftMIDRight及Find函数的使用
  7. 品优购商城项目(二)AngularJS、自动代码生成器、select2下拉多选框
  8. 基于Python的WEB接口开发与自动化测试 pdf(内含书签)
  9. 常用快捷键 & BLOG & Website
  10. OpenGL程序无法启动此应用程序,因为计算机中丢失glut32.dll(转))