Wiresharkは自分自身へのパケットはキャプチャーできないわけですが、
方法はあります。
ふりっつさんのブログにて分かりやすく解説されています。
【ネットワーク】Wiresharkで自端末へのパケットをキャプチャする方法
ということなので、スクリプト化してみましょう。
ちなみにHey, Scripting Guy!の助力を得て作成しています。
あ、動かすにはMACアドレス入れないとダメなんでよろしく。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' 変数宣言の強制 | |
Option Explicit | |
'--- 定数一覧 --- | |
' MACアドレス(“ipconfig /all”でコピー&ペーストしてください。) | |
Dim strMACAddress | |
strMACAddress = "XX-XX-XX-XX-XX-XX" | |
' コンピューター名 | |
Dim strComputer | |
strComputer = "." | |
'--- 処理の開始 --- | |
' WMIサービスからネットワーク接続設定を検索します | |
' このとき、MACアドレスはコロン区切りに置換して検索する必要があります | |
Dim colItems | |
Set colItems = GetObject("winmgmts:\\" & strComputer & "\root\cimv2").ExecQuery( _ | |
"SELECT * " & _ | |
"FROM Win32_NetworkAdapterConfiguration " & _ | |
"WHERE IPEnabled = True " & _ | |
"AND MACAddress = '" & UCase(Replace(strMACAddress, "-", ":")) + "'") | |
' コマンドを実行するためのオブジェクトを取得 | |
Dim objShell | |
Set objShell = CreateObject("Wscript.Shell") | |
' 多分0~1ですが、検索結果分ループします | |
Dim objItem | |
For Each objItem In colItems | |
' IPアドレス分ループします | |
Dim objAddress | |
For Each objAddress In objItem.IPAddress | |
' ARPテーブルに対象のIPアドレスが存在するかチェックします | |
' このときDOS窓がちらっと開きます | |
Dim objExec | |
Set objExec = objShell.Exec("arp -a") | |
Dim flgAlreadyRegist | |
flgAlreadyRegist = False | |
Do Until objExec.StdOut.AtEndOfStream | |
Dim strLine | |
strLine = objExec.StdOut.ReadLine | |
If InStr(strLine, LCase(strMACAddress)) <> 0 Then | |
flgAlreadyRegist = True | |
End If | |
Loop | |
' ARPテーブルにIPアドレスが未存在なら登録、存在していたら削除を行います | |
' 同時にルーティングテーブルも操作しておきます | |
If Not flgAlreadyRegist Then | |
If msgbox("[" _ | |
& objAddress _ | |
& "]をルーティングテーブルに登録しますか?", _ | |
vbOKCancel, _ | |
"確認") = vbOK Then | |
objShell.Run "arp -s " _ | |
& objAddress _ | |
& " " _ | |
& strMACAddress, 0, False | |
objShell.Run "route ADD " _ | |
& objAddress _ | |
& " mask 255.255.255.255 " _ | |
& objAddress, 0, False | |
Wscript.Echo "[" _ | |
& objAddress _ | |
& "]をルーティングテーブルに登録しました。" | |
End If | |
Else | |
If msgbox("[" _ | |
& objAddress _ | |
& "]をルーティングテーブルから削除しますか?", _ | |
vbOKCancel, _ | |
"確認") = vbOK Then | |
objShell.Run "route DELETE " & objAddress, 0, False | |
objShell.Run "arp -d " & objAddress, 0, False | |
Wscript.Echo "[" _ | |
& objAddress _ | |
& "]をルーティングテーブルから削除しました。" | |
End If | |
End If | |
Next | |
Next |
2014/11/06 追記:
ARPテーブルをこねこねするのは、たぶん管理者権限が必要です。
このスクリプトではARPでエラーが発生しても無視しますのでご注意ください。
エラーチェックするように修正するのは君だ!
0 件のコメント:
コメントを投稿