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が必要なのでインストール
ターミナルでCLコマンドが実行出来ればOK
Npcap SDK をダウンロードする
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