2011年5月30日月曜日

Wiresharkで自端末へのパケットをキャプチャする為のスクリプト

前からの続きです。

Wiresharkは自分自身へのパケットはキャプチャーできないわけですが、
方法はあります。

ふりっつさんのブログにて分かりやすく解説されています。
【ネットワーク】Wiresharkで自端末へのパケットをキャプチャする方法

ということなので、スクリプト化してみましょう。
ちなみにHey, Scripting Guy!の助力を得て作成しています。

あ、動かすにはMACアドレス入れないとダメなんでよろしく。

' 変数宣言の強制
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 件のコメント:

コメントを投稿