Golang 基为libpcap/winpcap的脚网络编程——gopacket安装

Go简介

Go是同样种编译型语言,它成了解释型语言的游刃有余,动态类型语言的出效率,以及静态类型的安全性。

语法类似C/C++,但是又含有一点python的寓意

中个体觉得最好美之特性就是是他的包管理,你得于GoDoc、Go
Search直达找到好多行的保管以及文档

再者就需要实行 go get path ( e.g.
go get https://godoc.org/github.com/google/gopacket)就可以用保证下充斥到当地

gopacket简介

gopacketgoogle兑现的一个冲libpcap的保,可以在GoDoc上找到该包的系文档

其富含多子包,提供了长的函数库,通过导入gopacket就得使用libpcap供的绝大多数API

gopacket安装

虽然gopacket是基于libpcap心想事成的,但是安装winpcap一样适用

而是无论是选择libpcap还是winpcap,在运还亟需先进行对应的装至地头(笔者安装的凡winpcap)

首先,通过go get https://godoc.org/github.com/google/gopacket,该命令会将那下充斥到GOPATH
(e.g. E:/GoWorkspace)

然当正儿八经以它们进行开前还有几单注意事项:

编排代码test.go

//测试gopacket是否能够正常使用
package main

import (
    "fmt"
    _ "github.com/google/gopacket"
    _ "github.com/google/gopacket/pcap"
)

func main() {
    fmt.Println("It works!")
}

运行go run test.go,若成功输出,那么要过了后文,开始你的gopacket之同吧!

只是也许会见现出如下错误

# github.com/google/gopacket/pcap
E:\GoWorkspace\src\github.com\google\gopacket\pcap\pcap.go:21:10: fatal error: pcap.h: No such file or directory
 #include <pcap.h>
          ^~~~~~~~
compilation terminated.

笔者为遇了这个错误,google了很长远并无找到任何有效之解决方案,之后看了gopacket源码才化解

究其原因就是在github.com/google/gopacket/pcap/pcap.go夫文件

//截取pcap.go的11-21行如下
#cgo solaris LDFLAGS: -L /opt/local/lib -lpcap
#cgo linux LDFLAGS: -lpcap
#cgo dragonfly LDFLAGS: -lpcap
#cgo freebsd LDFLAGS: -lpcap
#cgo openbsd LDFLAGS: -lpcap
#cgo darwin LDFLAGS: -lpcap
#cgo windows CFLAGS: -I C:/WpdPack/Include        //问题出在 17-19行
#cgo windows,386 LDFLAGS: -L C:/WpdPack/Lib -lwpcap
#cgo windows,amd64 LDFLAGS: -L C:/WpdPack/Lib/x64 -lwpcap
#include <stdlib.h>
#include <pcap.h>

由于pcap.go面临描写了一个C的wrapper,但是写好了libpcap/winpcap的安路径
pcap.go:L17-19 ,所以要安位置并非默认则会报上述失实

解决方案

  • 卸载并重新安装libpcap/winpcap到默认位置
  • 修改github.com/google/gopacket/pcap/pcap.go文件

前端太过繁琐,笔者选取后者,将pcap.go
17-19行的老三只路子改呢相应的装置路径即可

转载请注明出处:http://www.cnblogs.com/tr3e/p/7137089.html