vscode下使用gcc進行Npcap網路程式設計開發的環境設定

2020-09-27 08:00:55

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存放你的生成的可執行程式

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