目录

  • 0x01下载安装Npcap及其相关组件
    • 在官网下在Npcap的SDK以及环境支持
    • 解压、安装
    • C编译器对Npcap的支持
  • 0x02 vscode配置
    • vscode对于C、C++编译运行的基础环境配置
    • vscode对Npcap编程的配置
    • 编写测试文件
    • 测试
  • Code-Runner运行配置
    • WinNetworkProgram
  • 采坑记录,根据编译器版本进行配置的调整

我的配置包,可以下载 ,直接在里面进行编写源代码,但编译器的头文件配置还是需要的
资源附件

0x01下载安装Npcap及其相关组件

在官网下在Npcap的SDK以及环境支持

Npcap: Windows Packet Capture Library & Driver
这里有四个文件

  • Npcap 0.9997 installer for Windows 7/2008R2, 8/2012, 8.1/2012R2, 10/2016, 2019 (x86 and x64).
  • Npcap SDK 1.05 (ZIP).
  • Npcap 0.9997 debug symbols (ZIP).
  • Npcap 0.9997 source code (ZIP).
  1. 第一个是安装环境,必要的环境安装,没有的话就会缺少驱动程序。该程序会向系统注入必要的静态链接库,这些库是程序索要调用的必要的程序;
  2. SDK是软件开发工具包,里面包含了Npcap网络编程所必要的头文件和动态链接库
  3. 第三个是调试符号包,提供了调试的符号集
  4. 第四个提供了Npcap开发的源代码,开发人员可以阅读它了解底层原理或者进行优化。
    这里将这四个文件都下载下来

解压、安装

此处以个人安装方法进行介绍,原理是不变的
建立WinNetworkProgram文件夹,以下操作均在该文件夹下进行

  1. 运行npcap-0.9997.exe安装Npcap,傻瓜式安装,不作介绍;
  2. 将SDK的内容解压出来,放在SDK文件夹下;
  3. 将源代码文件解压至Source-code文件夹下;
  4. 将符号集解压至DebugSymbols文件夹下
  5. 建立Project文件夹,我们的项目在这个文件夹中展开
  6. 建立在Project文件夹下建立srcbin文件夹,src存放你的源代码,bin存放你的生成的可执行程序

C编译器对Npcap的支持

  • 在后面vscode中的配置只能支持vscode的C/C++插件对你的源代码的智能提示和代码补全,但是编译的时候vscode其实是调用了定义好的系统命令,如果编译器不支持,还是会有问题。所以,需要将NpcapInclude文件夹内的头文件放在C编译器的include中,让编译器能够找到该头文件
  • Npcap中的Include文件夹包含4个*.h文件和一个pcap文件夹,这些内容一起拷贝:
  • MInGW的``include很多,我也不清楚都是干啥用的,为了保险起见,将上面说的那4个头文件和pcap文件夹拷到MinGW中所有的include文件夹中 我放在了两个nclude`中,包括:

MinGW\include\
MinGW\i686-w64-mingw32\include


本人水平实在有限,如果这样还是会报文件包含路径的错误的话,烦请大家及时指出,我会尽量测试更改,谢谢


0x02 vscode配置

vscode对于C、C++编译运行的基础环境配置

  • 这部分在网络上资料很多,不作赘述,下载插件即可,建议安装C/C++ Extension Pack即可

vscode对Npcap编程的配置

  1. Project文件夹在vscode中打开,(打开文件夹)
  2. 一般C/C++这个插件会自动建立配置供你进行编辑,如果没有,建立.vscode文件夹,在里面创建c_cpp_properties.json文件,并填写以下代码:
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/..//SDK/Include/**","${workspaceFolder}/../SDK/Include","${workspaceFolder}/src/**","${workspaceFolder}/src"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "D:\\etc\\MinGW\\bin\\gcc.exe","cStandard": "gnu18","cppStandard": "gnu++14","intelliSenseMode": "gcc-x64","compilerArgs": ["-L${workspaceFolder}/../SDK/Lib","-lwpcap","-lPacket"]}],"version": 4
}

保存退出。

编写测试文件

test.c文件中写入如下代码:

#include "pcap.h"
#include <stdio.h>
int main()
{char errbuf[PCAP_ERRBUF_SIZE];//存放错误信息的缓冲pcap_if_t *it;int r;r=pcap_findalldevs(&it,errbuf);if(r==-1){printf("err:%s\n",errbuf);exit(-1);}while(it){printf(":%s\n",it->name);it=it->next;}
}
  • 该程序打印出本机的所有网卡列表

测试

  • 按F5对代码进行调试,首次调试会生成launch.jsontask.json文件,注意查看里面的参数内容和之前配置的c_cpp_properties.json中的是否一样,即该部分
"compilerArgs": ["-L${workspaceFolder}/../SDK/Lib/","-lwpcap","-lPacket"]

一般来说,这个文件是根据c_cpp_properties.json生成的,不会有大问题的。

  • 生成该文件后,重新按F5进行调试运行。注意要调试运行才能调用动态链接库
  • 控制台中有如下信息
Microsoft Windows [版本 10.0.19041.508]
(c) 2020 Microsoft Corporation. 保留所有权利。D:\home\xxxx\WinNetworkProgram> cmd /C "c:\Users\xxx\.vscode\extensions\ms-vscode.cpptools-1.0.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-340uippl.fhl --stdout=Microsoft-MIEngine-Out-ekoupmwk.30e --stderr=Microsoft-MIEngine-Error-jpdvtcwn.bxf --pid=Microsoft-MIEngine-Pid-xdcenvcj.2rm --dbgExe=D:\etc\MinGW\bin\gdb.exe --interpreter=mi "
:\Device\NPF_{456C0DB7-9C02-48CE-BF9C-D0201D93A39B}
:\Device\NPF_{65EB5D2F-C7FD-4DAB-B591-042BF9295C9B}
:\Device\NPF_{D235884A-3C87-4777-9B9C-9AF186C3BADF}

即成功

Code-Runner运行配置

  • 进入设置-工作区-扩展-Run Code Configuration,在settings.json中编辑Executor Map项。
  • settings.json编辑,将ccpp对应的项改为如下内容:
"c": "cd $dir && gcc $fileName -o $workspaceRoot\\bin\\$fileNameWithoutExt -L$workspaceRoot\\..\\SDK\\Lib -lwpcap -lPacket && cd $workspaceRoot\\bin\\ && $fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $workspaceRoot\\bin\\$fileNameWithoutExt -L$workspaceRoot\\..\\SDK\\Lib -lwpcap -lPacket && cd $workspaceRoot\\bin\\ && $fileNameWithoutExt",
  • 如此即可直接使用Code Runner的插件直接运行代码,为了不影响其他项目程序的编译过程,所以配置在工作空间中进行修改
  • 这里的$workspaceRoot就是之前的配置中的${workspaceFloder}
  • 开发的文件结构如下:

WinNetworkProgram


  • Project

    • .vscode

      • c_cpp_properties.json
      • launch.json
      • settings.json
      • tasks.json
    • src
      • test.c
    • bin
      • test.exe
  • SDK

  • DebugSymbols

  • Source-code


采坑记录,根据编译器版本进行配置的调整

先贴上我的MinGW的的buildinfo.txt

# **************************************************************************version : MinGW-W64-builds-4.3.5
user    : nixman
date    : 05.12.2018-12:56:26 AM
args    : --mode=gcc-8.1.0 --buildroot=/c/mingw810 --jobs=2 --rev=0 --rt-version=trunk --bootstrap --threads=posix --exceptions=sjlj --arch=i686 --bin-compress
PATH    : /usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
CFLAGS  : -O2 -pipe -fno-ident
CXXFLAGS: -O2 -pipe -fno-ident
CPPFLAGS:
LDFLAGS : -pipe -fno-ident# **************************************************************************
  • 重点在这里:args,里面有一项--arch=i686,这表明了要使用x86的库,即在上面的参数配置中,gcc-L参数直接写Lib文件夹就行,但是如果是这样
args    : --mode=gcc-8.1.0 --buildroot=/c/mingw810 --jobs=2 --rev=0 --rt-version=trunk --bootstrap --threads=win32 --exceptions=seh --arch=x86_64 --bin-compress

--arch=x86_64,即64位实现,在配置过程中,-L参数应该指向Lib\x64文件夹下,举例配置:

"compilerArgs": ["-L${workspaceFolder}/../SDK/Lib/x64","-lwpcap","-lPacket"]
"c": "cd $dir && gcc $fileName -o $workspaceRoot\\bin\\$fileNameWithoutExt -L$workspaceRoot\\..\\SDK\\Lib\\x64 -lwpcap -lPacket && cd $workspaceRoot\\bin\\ && $fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $workspaceRoot\\bin\\$fileNameWithoutExt -L$workspaceRoot\\..\\SDK\\Lib\\x64 -lwpcap -lPacket && cd $workspaceRoot\\bin\\ && $fileNameWithoutExt",

不同的
编译器版本会导致不同的问题,以下问题就是由于上述差异所导致。

vscode下使用gcc进行Npcap网络编程开发的环境配置相关推荐

  1. WinPcap网络编程入门——0. 环境配置及系列介绍

    WinPcap网络编程入门--0. 环境配置及系列介绍 系列教程章节直达: Winpcap网络编程入门--1. 获取设备列表: 说明:本教程适用于网络编程开发人员入门,将从底层分析 WinPcap 的 ...

  2. QT网络编程开发服务端

    下一篇: QT网络编程开发客户端 文章目录 基于Qt的网络编程服务端 QTcpServer 配置 listen() close() newConnection() SINGL readyRead() ...

  3. 【网络编程开发系列】好端端的MQTT-broker重新部署后居然出现TLS握手失败了

    摘要:本文通过一次真实的现网案例复盘,深度还原TLS握手问题的排查思路和方法,希望对广大读者有所启发和帮助. 文章目录 1 写在前面 2 问题描述 2.1 项目背景 2.2 现场问题 3 场景复现 3 ...

  4. iOS网络编程开发—HTTP协议

    iOS网络编程开发-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  5. iOS网络编程开发-数据加密

    iOS网络编程开发-数据加密 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles) ...

  6. Python网络爬虫简介与环境配置

    第一章 Python网络爬虫简介与环境配置 1.1 网络爬虫简介 随着互联网的快速发展越来越多的信息被发布到互联网上,这些信息被嵌入到各种各样的网页结构及样式中.虽然搜索引擎可以辅助用户搜索这些网页信 ...

  7. Motoman机器人离线编程——Visio Studio环境配置

    欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程--Motocom32开发简介 Motoman机器人离线编程--Visio Studio环境配置 Moto ...

  8. java web 进程通信_RMI网络编程开发之一 JAVA“进程间”通信方式

    注意该标题是 "进程"间通信,而并非"线程"之间的通信. 线程之间的通信是多线程的讨论范畴.这里我们是要讨论分布式的独立的JAVA程序之间是怎么通信的.当然,大 ...

  9. c vscode 高亮,vscode设置代码字体颜色高亮_编程开发工具

    vscode如何恢复默认设置_编程开发工具 vscode恢复默认设置的方法是:1.首先点击左下角,打开设置:2.然后点击右上角[{}]按钮:3.最后将右侧的用户设置json全部清空即可恢复默认设置. ...

  10. VScode/PyCharm+Anaconda+pyQt5的Python工程协同开发(环境搭建及项目配置)

    1.背景 之前对python的应用一直停留在写个main函数,写段逻辑,完成一个目的的阶段,不知道读者的学习路线是如何的? 至于python环境的搭建,个人实际上经历了以下几个阶段: ①早期接触时,从 ...

最新文章

  1. 在Jetson Xavier NX上安装torchvision编译报错:fatal error: libavcodec/avcodec.h: No such file or directory
  2. 满天星_Java实例_源码+图片素材
  3. 数据库原理 简单基础入门
  4. Android 撸起袖子,自己封装 DialogFragment
  5. C++ 命名空间(namespace)
  6. 学生选课系统代码-1 项目说明
  7. 算法学习之路|取石子
  8. 隆重推荐:公民税权手册
  9. 管理者如何做好“冲突管理”
  10. OpenGL 4.0 GLSL 采用平行光照模型
  11. bismark判断甲基化的比对原理
  12. 用友财务软件函数说明
  13. 打开个税App:竟要补税两万多...
  14. SQL Sever数据库存储过程
  15. 如何让店铺快速靠前排名
  16. 英文歌曲:God is a girl(上帝是女孩)
  17. 2018信用服务业市场:天眼查、企查查、启信宝、企查猫处第一梯队
  18. Python实践 - 网络爬虫笔记 - 1、对 URL 的 get 请求
  19. 一维数组——计算平均分
  20. 简单易用的中文PDF转码器

热门文章

  1. python二级通过率_计算机二级考试通过率太低?别担心,是真正备考的人变少了...
  2. c语言程序求对称矩阵,C中使用CBLAS/LAPACK的对称矩阵求逆
  3. CAD如何打印出多页PDF保存在一个PDF内
  4. GD32F103串口DMA收发(空闲中断 + DMA)
  5. qt 部署 错误_Qt 5.9 安装过程报错现象及解决方案
  6. qca9535 tftp32 刷机_【U-Boot】U-Boot 刷机方法大全
  7. http_load压力测试步骤
  8. github 仓库中文名_Github仓库重命名
  9. 阿里Maven仓库不限容量,免费用
  10. Odoo12功能模块文档整理