🏆

pcapyをWindowsで実行するための手順

に公開

なぜこんな記事を?

pcapなんて普通触らないよ。しかもそれをwindowsでさ、pythonでさ。

自分はEtherCATの開発中、自作パケットを生成したく、EtherCATの仕様上、IP無しL2ブロードキャストを生成しなければならず、一つの案としてpcap経由でのパケット送受信を行うことにしました。

そんなマニアックな理由でしか、pcapは触りませんよ・・・

そういう理由で、pcapをpythonで扱うためのpcapyのインストールは情報が少なく、大変苦労したので記録を残しておきます(やりたい方がいるとは思えないが汗)

ChatGPTに聞いても正しい回答が無かったぞ!!(なので超マニアック)

pcapってなに?

ネットワークのパケットキャプチャを行うための仕組みです。
有名なソフトとしては Wireshark です。というかそれ以外で見たことない。
そんなWiresharkも、ドライバはNpcapというライブラリを使ってます。

元々Linux界隈で、パケットキャプチャの意味でpcapという仕組みが流行っていましたが、それのWindows版でwinpcapやNpcap等があり、マニアックすぎる故にNpcap以外更新されていないといった形です。

マニアックすぎるので、本当に、この先は作業しなくても人生に困ることは無いと思われる(本当に)

pyenv-winの導入

管理者権限でPowerShellを起動する。

実行ポリシーを変更する。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

pyenv-winを導入する。

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

pcapyを何も考えずに入れてみる

エラーで落ちますね。
ここから良い方法が思いつかないので、一旦試した方法を列挙していきます。

pyenv で 3.8.2 を入れる

pyenv install 3.8.2
pyenv global 3.8.2

なんか最新すぎるとコンパイルエラーになるっぽいので、一旦3.8.2にしておきます。

Visual Studioが必要なのでインストール

https://visualstudio.microsoft.com/ja/vs/

ターミナルでCLコマンドが実行出来ればOK

Npcap SDK をダウンロードする

https://npcap.com/#download

Install版ではなく、Npcap SDK 1.15 (ZIP)をダウンロードします。
ファイルを解凍し、ファイル名をwpdpackに変更します。
Cドライブ直下に保存します。

pip install pcapy-ng を行ってみる

前項のwpdpackのフォルダがCドライブ直下にないと、pcap.hが見つからないとエラーになります。

pythonで実行してみる

import pcapy
pcapy.findalldevs()

これでネットワークデバイス名が表示されればOK

EtherCAT用の自作ライブラリを動かしてみる

ふぅ。無事にWindowsでL2ブロードキャストを送信して受信することが出来ました。
このライブラリについては安定した際に再度公開予定です。
PythonでEtherCATと通信できるの楽しいよ!

それでは!!
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
ArtifactNoise合同会社では技術コンサルタントを行っております。
ご興味があれば是非ご連絡くださいませ。
北神雄太 kitagami(at)artifactnoise.com
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■

Discussion