zoukankan      html  css  js  c++  java
  • Golang 基于libpcap/winpcap的底层网络编程——gopacket安装

    Go简介

    Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。

    语法类似C/C++,但是又带有一点python的味道

    其中个人认为最出色的特点就是他的包管理,你可以在GoDocGo 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:GoWorkspacesrcgithub.comgooglegopacketpcappcap.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

  • 相关阅读:
    对于基础资料的关联操作
    单据关联关系记录
    单据转换插件中新增行
    APK签名校验绕过
    android 安全需要关注
    安卓从业者应该关注:Android 6.0的运行时权限
    让阿里云的Centos,PHP组件 ImageMagick支持png和jpeg格式
    cocos2d-x 常规库的图文件配置
    cocos2d-x 添加 libLocalStorage 库...
    cocos2d-x3.9 默认是 gnustl_static 配置,但是 这个库缺少c++的基础功能... c++_static 功能全面些
  • 原文地址:https://www.cnblogs.com/tr3e/p/7137089.html
Copyright © 2011-2022 走看看