文章目录
- 前言
- 一、gopacket是什么?
- 二、gopacket前提
- [二、实践 枚举主机上网络设备的接口](#二、实践 枚举主机上网络设备的接口)
- 总结
前言
说起网络抓包,我们一定听过大名鼎鼎的Tcpdump和WireShark。他们分别是Linux平台和Windows平台的抓包工具。
Wireshark抓包工具,其底层抓包库是npcap(以前是winpcap);
Tcpdump,其抓包库是libpcap;
一、gopacket是什么?
gopacket库可以说是libpcap和npcap的go封装,提供了更方便的go语言操作接口。
项目地址:项目地址
项目文档:项目文档
二、gopacket前提
在使用gopacket包时,首先要确保在windows平台下安装了npcap或winpcap,或者是在linux平台下安装了libpcap库。
npcap下载地址:https://nmap.org/npcap/
libpcap下载地址:https://www.tcpdump.org/
下载自己电脑对应的操作系统版本的库
我们本次是在Centos操作系统下进行。
安装libpcap
bash
# yum 安装
yum install libpcap libpcap-devel
# 查看安装
rpm -qa | grep libpcap
安装gopacket
bash
go get github.com/google/gopacket
二、实践 枚举主机上网络设备的接口
1、代码
代码如下(示例):
go
package main
import (
"fmt"
"log"
"github.com/google/gopacket/pcap"
)
func main() {
devices, err := pcap.FindAllDevs()
if err != nil {
log.Fatal(err)
}
for _, device := range devices {
// fmt.Printf("Device: %v ", device)
fmt.Printf("Device NAME: %v \n", device.Name)
// fmt.Printf("Device Description: %v \n", device.Description)
// fmt.Printf("Device Flags: %v \n", device.Flags)
// fmt.Printf("Device Addresses: %v \n", device.Addresses)
for _, address := range device.Addresses {
fmt.Printf("IP NAME: %v \n", address.IP)
}
}
}
2、结果
代码如下(示例):
bash
[root@work gopacket]# go run day01/main.go
Device NAME: docker0
IP NAME: 172.17.0.1
Device NAME: nflog
Device NAME: nfqueue
Device NAME: usbmon1
Device NAME: usbmon2
Device NAME: ens33
IP NAME: 192.168.37.100
IP NAME: fe80::28eb:debf:57bc:2980
Device NAME: any
Device NAME: lo
IP NAME: 127.0.0.1
IP NAME: ::1
文档
我们可以打开gopacket下面的pcap查看具体的定义:
pcap
总结
本节,主要是搭建下开发环境,尝试获取网络设备的接口。下一节,尝试在一个网络设备上抓包。