您的位置:首页 > 其它

对指定的PCAP包分析后,按照IP和PORT进行拆分PCAP

2014-11-11 12:02 369 查看
#cs ____________________________________

Au3 版本: 3.3.6.1

脚本作者: wozijisunfly

Email: wozijisun@sina.com

QQ/TM:

脚本版本: v1.0

脚本功能: 实现读取PCAP包后,分析包信息,根据包信息中的的IP:PORT筛选,拆分数据,并保存为PCAP包。

#ce _______________脚本开始_________________

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <ComboConstants.au3>

#include <Winpcap.au3>

Opt('MustDeclareVars', 1)

Opt("GUICloseOnESC", 0)

Global $pcapfile,$dst_ip[1000000],$num=0,$all_ip_port,$pcap

Global $gui,$file_input,$msg,$btn_analysis,$comb,$btn_save,$scene_name,$dst_label

_create_gui()

Func _create_gui()

Local $winpcap=_PcapSetup()

If ($winpcap = -1) Then

MsgBox(0,"提示信息","无法获取或调用" & @SystemDir & "\wpcap.dll文件错误。")

Return

EndIf

Opt("GUICoordMode", 2)

Opt("GUIResizeMode", 1)

Opt("GUIOnEventMode", 1)

$gui = GUICreate("拆分PCAP文件",500,300,Default,Default)

GUISetOnEvent($GUI_EVENT_CLOSE, "_special_events")

GUISetOnEvent($GUI_EVENT_MINIMIZE, "_special_events")

GUISetOnEvent($GUI_EVENT_RESTORE, "_special_events")

$btn_analysis = GUICtrlCreateButton("选择PCAP文件",170,30,150,25)

GUICtrlSetFont(-1,12)

GUICtrlSetOnEvent($btn_analysis,"_analysis_pcap")

GUICtrlCreateLabel("建立场景名称:",-280,30,130,25)

GUICtrlSetFont(-1,12)

$scene_name = GUICtrlCreateInput("",0,-1,300,25)

GUICtrlSetFont($scene_name,12)

GUICtrlSetState($scene_name,$GUI_DISABLE)

GUICtrlCreateLabel("选择源IP:PORT信息:",-450,30,150,25)

GUICtrlSetFont(-1,12)

$comb = GUICtrlCreateCombo("",0,-1,300,45,$CBS_DROPDOWNLIST)

GUICtrlSetOnEvent($GUI_EVENT_PRIMARYDOWN,"_check_src_dst")

GUICtrlSetFont($comb,12)

GUICtrlSetState($comb,$GUI_DISABLE)

$dst_label = GUICtrlCreateLabel("",-350,5,300,30)

GUICtrlSetFont(-1,12)

GUICtrlSetColor(-1,0xd71345)

$btn_save = GUICtrlCreateButton("保存PCAP文件",-270,15,200,25)

GUICtrlSetFont($btn_save,12)

GUICtrlSetState($btn_save,$GUI_DISABLE)

GUICtrlSetOnEvent($btn_save,"_save_pcap")

GUISetState()

While 1

Sleep(10)

WEnd

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-10-24

;~ 功能:获取并分析PCAP包信息

;~ 参数:PCAP包中的数据

;~ 返回值:协议、IP(src/dst)、PORT(src/dst)、SEQUENCE、数据显示

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func MyDissector ($data)

Local $macdst=StringMid ($data,3,2)&":"&StringMid ($data,5,2)&":"&StringMid ($data,7,2)&":"&StringMid ($data,9,2)&":"&StringMid ($data,11,2)&":"&StringMid ($data,13,2)

Local $macsrc=StringMid ($data,15,2)&":"&StringMid ($data,17,2)&":"&StringMid ($data,19,2)&":"&StringMid ($data,21,2)&":"&StringMid ($data,23,2)&":"&StringMid ($data,25,2)

Local $ethertype=BinaryMid ( $data, 13 ,2 )

If $ethertype="0x0806" Then return "ARP " & $macsrc & "->" & $macdst

If $ethertype="0x0800" Then

Local $src=Number(BinaryMid ($data, 27 ,1)) & "." & Number(BinaryMid ($data, 28 ,1)) & "." & Number(BinaryMid ($data, 29 ,1)) & "." & Number(BinaryMid ($data, 30 ,1))

Local $dst=Number(BinaryMid ($data, 31 ,1)) & "." & Number(BinaryMid ($data, 32 ,1)) & "." & Number(BinaryMid ($data, 33 ,1)) & "." & Number(BinaryMid ($data, 34 ,1))

Switch BinaryMid ($data, 24 ,1)

Case "0x01"

return "ICMP " & $src & "->" & $dst

Case "0x02"

return "IGMP " & $src & "->" & $dst

Case "0x06"

Local $srcport=Number(BinaryMid ($data, 35 ,1))*256+Number(BinaryMid ($data, 36 ,1))

Local $dstport=Number(BinaryMid ($data, 37 ,1))*256+Number(BinaryMid ($data, 38 ,1))

Local $sequence=Number(BinaryMid ($data, 39 ,1))*16777216 + Number(BinaryMid ($data, 40 ,1))*65536 + Number(BinaryMid ($data, 41 ,1))*256 + Number(BinaryMid ($data, 42 ,1))

Local $flags=BinaryMid ($data, 48 ,1)

Local $f=""

If BitAND($flags,0x01) Then $f="Fin "

If BitAND($flags,0x02) Then $f&="Syn "

If BitAND($flags,0x04) Then $f&="Rst "

If BitAND($flags,0x08) Then $f&="Psh "

If BitAND($flags,0x10) Then $f&="Ack "

If BitAND($flags,0x20) Then $f&="Urg "

If BitAND($flags,0x40) Then $f&="Ecn "

If BitAND($flags,0x80) Then $f&="Cwr "

$f=StringTrimRight(StringReplace($f," ",","),1)

return "TCP(" & $f & ")->" & $src & ":" & $srcport & "->" & $dst & ":" & $dstport

;& "->" & $sequence & "->" & BinaryToString(BinaryMid ($data,67),4)

Case "0x11"

Local $srcport=Number(BinaryMid ($data, 35 ,1))*256+Number(BinaryMid ($data, 36 ,1))

Local $dstport=Number(BinaryMid ($data, 37 ,1))*256+Number(BinaryMid ($data, 38 ,1))

return "UDP "&$src&":"&$srcport&" -> "&$dst&":"&$dstport

Case Else

return "IP "&BinaryMid ($data, 24 ,1)&" "&$src&" -> "&$dst

EndSwitch

return BinaryMid ( $data, 13 ,2 )&" "&$src&" -> "&$dst

EndIf

If $ethertype="0x8137" OR $ethertype="0x8138" OR $ethertype="0x0022" OR $ethertype="0x0025" OR $ethertype="0x002A" OR $ethertype="0x00E0" OR $ethertype="0x00FF" Then

return "IPX "&$macsrc&" -> "&$macdst

EndIf

return "["&$ethertype&"] "&$macsrc&" -> "&$macdst

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-10-22

;~ 功能:点击gui窗体时反馈的信息

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _special_events()

Select

Case @GUI_CtrlId = $GUI_EVENT_CLOSE

If IsPtr($pcapfile) Then _PcapStopCaptureFile($pcapfile)

If IsPtr($pcap) Then _PcapStopCapture($pcap)

_PcapFree()

Exit

Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE

Case @GUI_CtrlId = $GUI_EVENT_RESTORE

EndSelect

EndFunc ;==>SpecialEvents

;~ 作者:wozijisunfly

;~ 创建时间:2014-11-10

;~ 功能:解析PCAP文件,并返回IP:PORT信息

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _analysis_pcap()

$file_input = FileOpenDialog("PCAP路径",".","Pcap (*.pcap)",1)

If @error And $file_input == "" Then

MsgBox(0,"提示信息","没有选择PCAP文件!请选择。")

Return

Else

$pcap=_PcapStartCapture("file://" & $file_input , "" , 1)

If ($pcap=-1) Then

MsgBox(0,"提示信息","PCAP文件出错" & @CRLF & _PcapGetLastError())

Return

EndIf

If IsPtr($pcap) Then ; If $pcap is a Ptr, then the capture is running

Local $time0=TimerInit()

Local $i = 0

If FileExists(@ScriptDir & "\pcap.txt") Then

FileDelete(@ScriptDir & "\pcap.txt")

EndIf

While (TimerDiff($time0)<500)

Local $packet=_PcapGetPacket($pcap)

If IsInt($packet) Then ExitLoop

$i+=1

If StringInStr(MyDissector($packet[3]),"TCP",1) Then

FileWriteLine(@ScriptDir & "\pcap.txt", $i & "->" & MyDissector($packet[3]))

EndIf

Wend

If FileExists(@ScriptDir & "\pcap.txt") Then

Dim $src_ip[10000000],$comb_data = ""

$num = 0

Local $file = FileOpen(@ScriptDir & "\pcap.txt", 0)

If $file = -1 Then

MsgBox(0,"提示信息","不能打开 " & @ScriptDir & "\pcap.txt文件,请检查。")

Return

EndIf

While 1

Local $mark = 0,$i

Local $line = FileReadLine($file)

If @error = -1 Then ExitLoop

Local $arr = StringSplit($line,"->",1)

If IsArray($arr) Then

For $i = 0 To $num

If $src_ip[$i] == $arr[3] Then

$mark = 0

ExitLoop

Else

$mark = 1

ContinueLoop

EndIf

Next

If $mark == 1 Then

$num = $num + 1

$src_ip[$num] = $arr[3]

$dst_ip[$num] = $arr[3] & "->" & $arr[4] ;& "->" & $arr[5]

EndIf

EndIf

Wend

FileClose($file)

If FileExists(@ScriptDir & "\pcap.txt") Then

FileDelete(@ScriptDir & "\pcap.txt")

EndIf

For $i = 1 To $num

$comb_data = $comb_data & "|" & $src_ip[$i]

Next

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetData($dst_label,"")

GUICtrlSetData($comb,"")

GUICtrlSetData($comb,$comb_data)

Else

MsgBox(0,"提示信息",@ScriptDir & "\pcap.txt文件不存在,请检查。")

Return

EndIf

Else

MsgBox(0,"提示信息","PCAP文件不能转换一个表达式到指针变量。")

Return

EndIf

EndIf

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-11-10

;~ 功能:选择下拉列表中的数值,回显出对应的值

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _check_src_dst()

Local $i

$all_ip_port = ""

For $i = 0 To $num

If StringInStr($dst_ip[$i],GUICtrlRead(@GUI_CtrlId)) == 1 Then

Local $gui_arr = StringSplit($dst_ip[$i],"->",1)

If IsArray($gui_arr) Then

$all_ip_port = $dst_ip[$i]

GUICtrlSetData($dst_label,"")

GUICtrlSetData($dst_label,"目的IP:PORT->" & $gui_arr[2])

GUICtrlSetFont($dst_label,12)

Else

MsgBox(0,"提示信息",$dst_ip[$i] & "解析有误,无法进行PCAP包拆分。")

Return

EndIf

ExitLoop

Else

ContinueLoop

EndIf

Next

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-11-10

;~ 功能:按照下拉列表的选择,保存PCAP文件

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _save_pcap()

If StringLen($all_ip_port) == 0 Then

MsgBox(0,"提示信息","请选择一个IP:PORT。")

Return

EndIf

Local $ip_port = StringSplit($all_ip_port,"->",1)

Local $first_ip,$first_port,$second_ip,$second_port

If IsArray($ip_port) Then

Local $first = StringSplit($ip_port[1],":")

Local $second = StringSplit($ip_port[2],":")

If IsArray($first) Then

$first_ip = $first[1]

$first_port = $first[2]

Else

MsgBox(0,"提示信息",$ip_port[1] & "解析有误,无法进行PCAP包拆分。")

Return

EndIf

If IsArray($second) Then

$second_ip = $second[1]

$second_port = $second[2]

Else

MsgBox(0,"提示信息",$ip_port[2] & "解析有误,无法进行PCAP包拆分。")

Return

EndIf

Else

MsgBox(0,"提示信息",$all_ip_port & "解析有误,无法进行PCAP包拆分")

Return

EndIf

Local $filter = "(ip src " & $first_ip & " && tcp port " & $first_port

$filter &= " && ip dst " & $second_ip & " && tcp port " & $second_port & ") || ("

$filter &= "ip src " & $second_ip & " && tcp port " & $second_port

$filter &= " && ip dst " & $first_ip & " && tcp port " & $first_port & ")"

$pcap = _PcapStartCapture("file://" & $file_input ,$filter,1)

Local $file = @ScriptDir & "\" & GUICtrlRead($scene_name) & "-" & $first_ip & "_" & $first_port & "-" & $second_ip & "_" & $second_port

If ($file<>"") Then

If StringLower(StringRight($file,5))<>".pcap" Then $file&=".pcap"

If FileExists($file) Then

MsgBox(0,"提示信息","已经存在了该场景的文件,若要保存请修改文件名称。")

Return

EndIf

$pcapfile=_PcapSaveToFile($pcap,$file)

If ($pcapfile=0) Then

MsgBox(0,"提示信息","保存的PCAP文件出错" & _PcapGetLastError())

Return

EndIf

EndIf

If IsPtr($pcap) Then

Local $time0=TimerInit()

While (TimerDiff($time0)<500)

Local $packet=_PcapGetPacket($pcap)

If IsInt($packet) Then ExitLoop

If IsPtr($pcapfile) Then _PcapWriteLastPacket($pcapfile)

Wend

Else

MsgBox(0,"提示信息","选中的不是一个PCAP包。")

Return

EndIf

If IsPtr($pcapfile) Then _PcapStopCaptureFile($pcapfile)

if IsPtr($pcap) Then _PcapStopCapture($pcap)

MsgBox(0,"提示信息","PCAP包分析完成。",3)

Return

EndFunc

;应用定时器实现一个,动态显示的效果。主要是面对大PCAP文件来实现的小功能;

#cs ____________________________________

Au3 版本: 3.3.6.1

脚本作者: wozijisunfly

Email: wozijisunfly@sina.com

QQ/TM:

脚本版本: v1.0

脚本功能: 实现读取PCAP包后,分析包信息,根据包信息中的的IP:PORT筛选,拆分数据,并保存为PCAP包。

#ce _______________脚本开始_________________

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <ComboConstants.au3>

#include <Timers.au3>

#include <Winpcap.au3>

Opt('MustDeclareVars', 1)

Opt("GUICloseOnESC", 0)

Global $pcapfile,$dst_ip[1000000],$num=0,$all_ip_port,$pcap

Global $gui,$file_input,$msg,$btn_analysis,$comb,$btn_save,$scene_name,$dst_label

Global $wait,$1,$num_click=1

_create_gui()

Func _create_gui()

Local $winpcap=_PcapSetup()

If ($winpcap = -1) Then

MsgBox(0,"提示信息","无法获取或调用" & @SystemDir & "\wpcap.dll文件错误。")

Return

EndIf

Opt("GUICoordMode", 2)

Opt("GUIResizeMode", 1)

Opt("GUIOnEventMode", 1)

$gui = GUICreate("拆分PCAP文件",500,300,Default,Default)

GUISetOnEvent($GUI_EVENT_CLOSE, "_special_events")

GUISetOnEvent($GUI_EVENT_MINIMIZE, "_special_events")

GUISetOnEvent($GUI_EVENT_RESTORE, "_special_events")

$btn_analysis = GUICtrlCreateButton("选择PCAP文件",170,30,150,25)

GUICtrlSetFont(-1,12)

GUICtrlSetOnEvent($btn_analysis,"_analysis_pcap")

GUICtrlCreateLabel("建立场景名称:",-280,30,130,25)

GUICtrlSetFont(-1,12)

$scene_name = GUICtrlCreateInput("",0,-1,300,25)

GUICtrlSetFont($scene_name,12)

GUICtrlSetState($scene_name,$GUI_DISABLE)

GUICtrlCreateLabel("选择源IP:PORT信息:",-450,30,150,25)

GUICtrlSetFont(-1,12)

$comb = GUICtrlCreateCombo("",0,-1,300,45,$CBS_DROPDOWNLIST + $WS_VSCROLL)

GUICtrlSetOnEvent($GUI_EVENT_PRIMARYDOWN,"_check_src_dst")

GUICtrlSetFont($comb,12)

GUICtrlSetState($comb,$GUI_DISABLE)

$dst_label = GUICtrlCreateLabel("",-350,5,300,30)

GUICtrlSetFont(-1,12)

GUICtrlSetColor(-1,0xd71345)

$btn_save = GUICtrlCreateButton("保存PCAP文件",-270,15,200,25)

GUICtrlSetFont($btn_save,12)

GUICtrlSetState($btn_save,$GUI_DISABLE)

GUICtrlSetOnEvent($btn_save,"_save_pcap")

$wait = GUICtrlCreateLabel("正在拆分PCAP包,请耐心等待",-230,10,215,25)

GUICtrlSetFont(-1,12)

GUICtrlSetColor(-1,0xd71345)

GUICtrlSetState(-1,$GUI_HIDE)

$1 = GUICtrlCreateLabel("",0,-1,60,25)

GUICtrlSetFont(-1,15)

GUICtrlSetState(-1,$GUI_HIDE)

GUISetState()

While 1

Sleep(10)

WEnd

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-10-24

;~ 功能:获取并分析PCAP包信息

;~ 参数:PCAP包中的数据

;~ 返回值:协议、IP(src/dst)、PORT(src/dst)、SEQUENCE、数据显示

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func MyDissector ($data)

Local $macdst=StringMid ($data,3,2)&":"&StringMid ($data,5,2)&":"&StringMid ($data,7,2)&":"&StringMid ($data,9,2)&":"&StringMid ($data,11,2)&":"&StringMid ($data,13,2)

Local $macsrc=StringMid ($data,15,2)&":"&StringMid ($data,17,2)&":"&StringMid ($data,19,2)&":"&StringMid ($data,21,2)&":"&StringMid ($data,23,2)&":"&StringMid ($data,25,2)

Local $ethertype=BinaryMid ( $data, 13 ,2 )

If $ethertype="0x0806" Then return "ARP " & $macsrc & "->" & $macdst

If $ethertype="0x0800" Then

Local $src=Number(BinaryMid ($data, 27 ,1)) & "." & Number(BinaryMid ($data, 28 ,1)) & "." & Number(BinaryMid ($data, 29 ,1)) & "." & Number(BinaryMid ($data, 30 ,1))

Local $dst=Number(BinaryMid ($data, 31 ,1)) & "." & Number(BinaryMid ($data, 32 ,1)) & "." & Number(BinaryMid ($data, 33 ,1)) & "." & Number(BinaryMid ($data, 34 ,1))

Switch BinaryMid ($data, 24 ,1)

Case "0x01"

return "ICMP " & $src & "->" & $dst

Case "0x02"

return "IGMP " & $src & "->" & $dst

Case "0x06"

Local $srcport=Number(BinaryMid ($data, 35 ,1))*256+Number(BinaryMid ($data, 36 ,1))

Local $dstport=Number(BinaryMid ($data, 37 ,1))*256+Number(BinaryMid ($data, 38 ,1))

Local $sequence=Number(BinaryMid ($data, 39 ,1))*16777216 + Number(BinaryMid ($data, 40 ,1))*65536 + Number(BinaryMid ($data, 41 ,1))*256 + Number(BinaryMid ($data, 42 ,1))

Local $flags=BinaryMid ($data, 48 ,1)

Local $f=""

If BitAND($flags,0x01) Then $f="Fin "

If BitAND($flags,0x02) Then $f&="Syn "

If BitAND($flags,0x04) Then $f&="Rst "

If BitAND($flags,0x08) Then $f&="Psh "

If BitAND($flags,0x10) Then $f&="Ack "

If BitAND($flags,0x20) Then $f&="Urg "

If BitAND($flags,0x40) Then $f&="Ecn "

If BitAND($flags,0x80) Then $f&="Cwr "

$f=StringTrimRight(StringReplace($f," ",","),1)

return "TCP(" & $f & ")->" & $src & ":" & $srcport & "->" & $dst & ":" & $dstport

;& "->" & $sequence & "->" & BinaryToString(BinaryMid ($data,67),4)

Case "0x11"

Local $srcport=Number(BinaryMid ($data, 35 ,1))*256+Number(BinaryMid ($data, 36 ,1))

Local $dstport=Number(BinaryMid ($data, 37 ,1))*256+Number(BinaryMid ($data, 38 ,1))

return "UDP "&$src&":"&$srcport&" -> "&$dst&":"&$dstport

Case Else

return "IP "&BinaryMid ($data, 24 ,1)&" "&$src&" -> "&$dst

EndSwitch

return BinaryMid ( $data, 13 ,2 )&" "&$src&" -> "&$dst

EndIf

If $ethertype="0x8137" OR $ethertype="0x8138" OR $ethertype="0x0022" OR $ethertype="0x0025" OR $ethertype="0x002A" OR $ethertype="0x00E0" OR $ethertype="0x00FF" Then

return "IPX "&$macsrc&" -> "&$macdst

EndIf

return "["&$ethertype&"] "&$macsrc&" -> "&$macdst

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-10-22

;~ 功能:点击gui窗体时反馈的信息

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _special_events()

Select

Case @GUI_CtrlId = $GUI_EVENT_CLOSE

If IsPtr($pcapfile) Then _PcapStopCaptureFile($pcapfile)

If IsPtr($pcap) Then _PcapStopCapture($pcap)

_PcapFree()

_Timer_KillAllTimers($gui)

Exit

Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE

Case @GUI_CtrlId = $GUI_EVENT_RESTORE

EndSelect

EndFunc ;==>SpecialEvents

;~ 作者:wozijisunfly

;~ 创建时间:2014-11-10

;~ 功能:解析PCAP文件,并返回IP:PORT信息

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _analysis_pcap()

$file_input = FileOpenDialog("PCAP路径",".","Pcap (*.pcap)| Pcap (*.cap)",1)

If @error And $file_input == "" Then

MsgBox(0,"提示信息","没有选择PCAP文件!请选择。")

Return

Else

GUICtrlSetState($scene_name,$GUI_DISABLE)

GUICtrlSetState($btn_save,$GUI_DISABLE)

GUICtrlSetState($comb,$GUI_DISABLE)

GUICtrlSetState($btn_analysis,$GUI_DISABLE)

$pcap=_PcapStartCapture("file://" & $file_input , "" , 1)

If ($pcap=-1) Then

MsgBox(0,"提示信息","PCAP文件出错" & @CRLF & _PcapGetLastError())

Return

EndIf

If IsPtr($pcap) Then ; If $pcap is a Ptr, then the capture is running

Local $time0=TimerInit()

Local $i

Dim $src_ip[10000000],$comb_data = ""

Local $timeset = _Timer_SetTimer($gui, 1000, "__point2")

$num = 0

While (TimerDiff($time0)<5000000)

Local $packet=_PcapGetPacket($pcap)

If IsInt($packet) Then ExitLoop

Local $mark = 0

Local $ips = MyDissector($packet[3])

If StringInStr($ips,"TCP",1) Then

Local $arr = StringSplit($ips,"->",1)

If IsArray($arr) Then

For $i = 0 To $num

If $src_ip[$i] == $arr[2] Then

$mark = 0

ExitLoop

Else

$mark = 1

ContinueLoop

EndIf

Next

If $mark == 1 Then

$num = $num + 1

$src_ip[$num] = $arr[2]

$dst_ip[$num] = $arr[2] & "->" & $arr[3]

EndIf

EndIf

EndIf

Wend

For $i = 1 To $num

$comb_data = $comb_data & "|" & $src_ip[$i]

Next

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetData($dst_label,"")

GUICtrlSetData($comb,"")

GUICtrlSetData($comb,$comb_data)

_Timer_KillAllTimers($gui)

$num_click=1

Else

MsgBox(0,"提示信息","PCAP文件不能转换一个表达式到指针变量。")

_Timer_KillAllTimers($gui)

$num_click=1

GUICtrlSetData($dst_label,"")

Return

EndIf

EndIf

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-11-10

;~ 功能:选择下拉列表中的数值,回显出对应的值

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _check_src_dst()

Local $i

$all_ip_port = ""

For $i = 0 To $num

If StringInStr($dst_ip[$i],GUICtrlRead(@GUI_CtrlId)) == 1 Then

Local $gui_arr = StringSplit($dst_ip[$i],"->",1)

If IsArray($gui_arr) Then

$all_ip_port = $dst_ip[$i]

GUICtrlSetData($dst_label,"")

GUICtrlSetData($dst_label,"目的IP:PORT->" & $gui_arr[2])

GUICtrlSetFont($dst_label,12)

Else

MsgBox(0,"提示信息",$dst_ip[$i] & "解析有误,无法进行PCAP包拆分。")

Return

EndIf

ExitLoop

Else

ContinueLoop

EndIf

Next

EndFunc

;~ 作者:wozijisunfly

;~ 创建时间:2014-11-10

;~ 功能:按照下拉列表的选择,保存PCAP文件

;~ 参数:

;~ 返回值:无

;~ 修改人:

;~ 修改内容:

;~ 修改时间:

Func _save_pcap()

GUICtrlSetState($scene_name,$GUI_DISABLE)

GUICtrlSetState($btn_save,$GUI_DISABLE)

GUICtrlSetState($comb,$GUI_DISABLE)

GUICtrlSetState($btn_analysis,$GUI_DISABLE)

Local $timeset = _Timer_SetTimer($gui, 1000, "__point1")

If StringLen($all_ip_port) == 0 Then

MsgBox(0,"提示信息","请选择一个IP:PORT。")

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

Local $ip_port = StringSplit($all_ip_port,"->",1)

Local $first_ip,$first_port,$second_ip,$second_port

If IsArray($ip_port) Then

Local $first = StringSplit($ip_port[1],":")

Local $second = StringSplit($ip_port[2],":")

If IsArray($first) Then

$first_ip = $first[1]

$first_port = $first[2]

Else

MsgBox(0,"提示信息",$ip_port[1] & "解析有误,无法进行PCAP包拆分。")

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

If IsArray($second) Then

$second_ip = $second[1]

$second_port = $second[2]

Else

MsgBox(0,"提示信息",$ip_port[2] & "解析有误,无法进行PCAP包拆分。")

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

Else

MsgBox(0,"提示信息",$all_ip_port & "解析有误,无法进行PCAP包拆分")

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

Local $filter = "(ip src " & $first_ip & " && tcp port " & $first_port

$filter &= " && ip dst " & $second_ip & " && tcp port " & $second_port & ") || ("

$filter &= "ip src " & $second_ip & " && tcp port " & $second_port

$filter &= " && ip dst " & $first_ip & " && tcp port " & $first_port & ")"

$pcap = _PcapStartCapture("file://" & $file_input ,$filter,1)

Local $file = @ScriptDir & "\" & GUICtrlRead($scene_name) & "-" & $first_ip & "_" & $first_port & "-" & $second_ip & "_" & $second_port

If ($file<>"") Then

If StringLower(StringRight($file,5))<>".pcap" Then $file&=".pcap"

If FileExists($file) Then

MsgBox(0,"提示信息","已经存在了该场景的文件,若要保存请修改文件名称。")

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

$pcapfile=_PcapSaveToFile($pcap,$file)

If ($pcapfile=0) Then

MsgBox(0,"提示信息","保存的PCAP文件出错" & _PcapGetLastError())

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

EndIf

If IsPtr($pcap) Then

Local $time0=TimerInit()

While (TimerDiff($time0)<5000000)

Local $packet=_PcapGetPacket($pcap)

If IsInt($packet) Then ExitLoop

If IsPtr($pcapfile) Then _PcapWriteLastPacket($pcapfile)

Wend

Else

MsgBox(0,"提示信息","选中的不是一个PCAP包。")

_Timer_KillAllTimers($gui)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

Return

EndIf

If IsPtr($pcapfile) Then _PcapStopCaptureFile($pcapfile)

if IsPtr($pcap) Then _PcapStopCapture($pcap)

GUICtrlSetState($btn_save,$GUI_ENABLE)

GUICtrlSetState($scene_name,$GUI_ENABLE)

GUICtrlSetState($comb,$GUI_ENABLE)

GUICtrlSetState($btn_analysis,$GUI_ENABLE)

_Timer_KillAllTimers($gui)

GUICtrlSetState($wait,$GUI_HIDE)

GUICtrlSetState($1,$GUI_HIDE)

$num_click=1

MsgBox(0,"提示信息","PCAP包分析完成。",3)

Return

EndFunc

Func __point1($hWnd, $Msg, $iIDTimer, $dwTime)

#forceref $hWnd, $Msg, $iIDTimer, $dwTime

GUICtrlSetState($wait,$GUI_SHOW)

GUICtrlSetState($1,$GUI_SHOW)

Local $i,$point=""

For $i = 1 To $num_click

$point = $point & "."

If $num_click == 7 Then

$num_click = 1

$point = "."

ExitLoop

Else

ContinueLoop

EndIf

Next

$num_click = $num_click + 1

GUICtrlSetData($1,"")

GUICtrlSetData($1,$point)

GUICtrlSetFont($1,15)

EndFunc

Func __point2($hWnd, $Msg, $iIDTimer, $dwTime)

#forceref $hWnd, $Msg, $iIDTimer, $dwTime

Local $i,$point=""

For $i = 1 To $num_click

$point = $point & "."

If $num_click == 7 Then

$num_click = 1

$point = "."

ExitLoop

Else

ContinueLoop

EndIf

Next

$num_click = $num_click + 1

GUICtrlSetData($dst_label,"")

GUICtrlSetData($dst_label,"正在解析PCAP包 " & $point)

GUICtrlSetFont($dst_label,12)

EndFunc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: