
TCP连接查看工具.ahk
; https://github.com/jNizM/TCPView
; SCRIPT DIRECTIVES =============================================================================================================
#Requires AutoHotkey v2.0-beta.1
#DllLoad "dnsapi.dll"
#DllLoad "iphlpapi.dll"
#DllLoad "ntdll.dll"
#DllLoad "shell32.dll"
#DllLoad "ws2_32.dll"
; GLOBALS =======================================================================================================================
app := Map("name", "TCPView", "version", "0.4", "release", "2021-09-06", "author", "jNizM", "licence", "MIT")
LV_Header := ["Process Name", "Process ID", "Protocol", "State", "Local Address", "Local Port", "Remote Address", "Remote Port", "Create Time", "Module Name"]
LV_Options := ["150 Text Left", "100 Integer Right", "80 Text Center", "80 Text Left", "150 Integer Left", "90 Integer Right", "150 Integer Left", "90 Integer Right", "140 Text Right", "180 Text Left"]
SB_Info := [" Endpoints:", "Established:", "Listening:", "Time Wait:", "Close Wait:", "Update:", "States: (All)"]
PORTS := Map(22, "ssh", 80, "http", 135, "epmap", 443, "https", 445, "microsoft-ds")
SortCol := 0
; GUI ===========================================================================================================================
OnMessage 0x0135, WM_CTLCOLORBTN
hhr1 := DllCall("gdi32\CreateBitmap", "int", 1, "int", 2, "int", 0x1, "int", 32, "int64*", 0x7f5a5a5a7fa5a5a5, "ptr")
hhr2 := DllCall("gdi32\CreateBitmap", "int", 1, "int", 2, "int", 0x1, "int", 32, "int64*", 0x7fcfcfcf7ffcfcfc, "ptr")
Main := Gui("+Resize", app["name"])
Main.MarginX := 0
Main.MarginY := 0
Main.BackColor := "FFFFFF"
Main.SetFont("s10", "Segoe UI")
Try PIC1 := Main.AddPicture("xm ym w1250 h1 BackgroundTrans", "HBITMAP:*" hhr1)
CB1 := Main.AddCheckBox("xm+5 y+4 w80 h27 0x1000 Checked", "TCP v4")
CB2 := Main.AddCheckBox("x+4 yp w80 h27 0x1000", "TCP v6")
CB3 := Main.AddCheckBox("x+4 yp w80 h27 0x1000", "UDP v4")
CB4 := Main.AddCheckBox("x+4 yp w80 h27 0x1000", "UDP v6")
CB5 := Main.AddCheckBox("x+4 yp w80 h27 0x1000 Checked", "Pause")
CB5.OnEvent("Click", CB_Click)
DDL1 := Main.AddDropDownList("x+5 yp+1 w100 Choose2", ["2 Seconds", "5 Seconds", "10 Seconds"])
DDL1.OnEvent("Change", DDL1_Change)
CB6 := Main.AddCheckBox("x+4 yp-1 w80 h27 0x1000", "Resolve")
Main.SetFont("s9", "Segoe UI")
PIC2 := Main.AddPicture("xm y+4 w1250 h2 BackgroundTrans", "HBITMAP:*" hhr2)
LV := Main.AddListView("w1250 r30 xm-1 y+0 -LV0x10 LV0x10000 -E0x0200", LV_Header)
loop LV_Options.Length
LV.ModifyCol(A_Index, LV_Options[A_Index])
ImageListID1 := IL_Create(10)
ImageListID2 := IL_Create(10, 10, true)
LV.SetImageList(ImageListID1)
LV.SetImageList(ImageListID2)
LV.OnEvent("ContextMenu", LV_ContextMenu)
SB := Main.AddStatusBar("")
SB.SetParts(120, 120, 120, 120, 120, 120)
loop SB_Info.Length
SB.SetText(SB_Info[A_Index], A_Index)
Main.OnEvent("Size", Gui_Size)
Main.OnEvent("Close", Gui_Close)
Main.Show()
SetExplorerTheme(LV.Hwnd)
HideFocusBorder(Main.Hwnd)
SetTimer NetStat, -1000
; WINDOW EVENTS =================================================================================================================
Gui_Size(thisGui, MinMax, Width, Height)
{
if (MinMax = -1)
return
Try PIC1.Move(,, Width)
PIC2.Move(,, Width)
LV.Move(,, Width + 3, Height - 61)
}
Gui_Close(thisGui)
{
global hBrush
if (hBrush)
DllCall("gdi32\DeleteObject", "ptr", hBrush)
ExitApp
}
; CONTROL EVENTS ================================================================================================================
CB_Click(*)
{
if (CB5.Value)
{
CB5.Text := "Pause"
Interval := (DDL1.Value = 1) ? 2000 : (DDL1.Value = 2) ? 5000 : (DDL1.Value = 3) ? 10000 : 5000
SB.SetText("Update: " StrLower(SubStr(DDL1.Text, 1, -4)), 6)
SetTimer NetStat, Interval
}
else
{
CB5.Text := "Resume"
SB.SetText("Paused", 6)
SetTimer NetStat, 0
}
}
DDL1_Change(*)
{
Interval := (DDL1.Value = 1) ? 2000 : (DDL1.Value = 2) ? 5000 : (DDL1.Value = 3) ? 10000 : 5000
SB.SetText("Update: " StrLower(SubStr(DDL1.Text, 1, -4)), 6)
SetTimer NetStat, Interval
}
LV_ContextMenu(LV, Item, IsRightClick, X, Y)
{
ContextMenu := Menu()
ContextMenu.Add("Select All", Select)
ContextMenu.SetIcon("Select All", "imageres.dll", 249)
ContextMenu.Add("Export", Export)
ContextMenu.SetIcon("Export", "shell32.dll", 259)
ContextMenu.Add("Copy", Copy)
ContextMenu.SetIcon("Copy", "shell32.dll", 135)
ContextMenu.Show(X, Y)
Select(*)
{
LV.Modify(0, "Select")
}
Export(*)
{
ExportFile := A_Desktop "\tcpview.csv"
if (FileExist(ExportFile))
FileDelete(ExportFile)
loop LV.GetCount() + 1
{
i := A_Index - 1, Line := ""
loop LV.GetCount("Column")
{
RetrievedText := LV.GetText(i, A_Index)
Line .= RetrievedText ";"
}
FileAppend(SubStr(Line, 1, -1) "`n", ExportFile, "RAW")
}
Main.Opt("+OwnDialogs")
MsgBox("CSV-Export is done (Desktop)", "CSV-Export", "T3")
}
Copy(*)
{
LV_List := ListViewGetContent("Selected", LV)
A_Clipboard := LV_List
}
}
; FUNCTIONS =====================================================================================================================
HideFocusBorder(wParam, lParam := "", Msg := "", hWnd := "")
{
static Affected := Map()
static WM_UPDATEUISTATE := 0x0128
static UIS_SET := 1
static UISF_HIDEFOCUS := 0x1
static SET_HIDEFOCUS := UIS_SET << 16 | UISF_HIDEFOCUS
static init := OnMessage(WM_UPDATEUISTATE, HideFocusBorder)
if (Msg = WM_UPDATEUISTATE) {
if (wParam = SET_HIDEFOCUS)
Affected[hWnd] := true
else if (Affected.Has(hWnd))
PostMessage WM_UPDATEUISTATE, SET_HIDEFOCUS, 0,, "ahk_id " hWnd
}
else if (DllCall("user32\IsWindow", "ptr", wParam, "uint"))
PostMessage WM_UPDATEUISTATE, SET_HIDEFOCUS, 0,, "ahk_id " wParam
}
WM_CTLCOLORBTN(*)
{
global hBrush
return hBrush := DllCall("gdi32\CreateSolidBrush", "uint", 0xFFFFFF, "uptr")
}
SetExplorerTheme(handle)
{
if (DllCall("kernel32\GetVersion", "uchar") > 5) {
VarSetStrCapacity(&ClassName, 1024)
if (DllCall("user32\GetClassName", "ptr", handle, "str", ClassName, "int", 512, "int")) {
if (ClassName = "SysListView32") || (ClassName = "SysTreeView32")
return !DllCall("uxtheme\SetWindowTheme", "ptr", handle, "str", "Explorer", "ptr", 0)
}
}
return false
}
Process32()
{
static PROCESS_QUERY_INFORMATION := 0x00000400
static TH32CS_SNAPPROCESS := 0x00000002
if (hSnapshot := DllCall("kernel32\CreateToolhelp32Snapshot", "uint", TH32CS_SNAPPROCESS, "uint", 0, "ptr"))
{
TABLE := Map()
PROCESSENTRY32W := Buffer(A_PtrSize = 8 ? 568 : 556, 0)
NumPut("uint", PROCESSENTRY32W.Size, PROCESSENTRY32W, 0)
if (DllCall("kernel32\Process32FirstW", "ptr", hSnapshot, "ptr", PROCESSENTRY32W))
{
while (DllCall("kernel32\Process32NextW", "ptr", hSnapshot, "ptr", PROCESSENTRY32W))
{
ROW := Map(), ProcessID := 0, hIcon := 0, IconNumber := 0
ROW["ProcessID"] := ProcessID := NumGet(PROCESSENTRY32W, 8, "uint")
ROW["ExeFile"] := StrGet(PROCESSENTRY32W.Ptr + (A_PtrSize = 8 ? 44 : 36), "utf-16")
if (hProcess := DllCall("kernel32\OpenProcess", "uint", PROCESS_QUERY_INFORMATION, "int", 0, "uint", ProcessID, "ptr"))
{
Size := VarSetStrCapacity(&ImagePath, 520)
DllCall("kernel32\QueryFullProcessImageNameW", "ptr", hProcess, "uint", 0, "str", ImagePath, "uint*", Size)
DllCall("kernel32\CloseHandle", "ptr", hProcess)
if (ImagePath)
{
SHFILEINFOW := Buffer(A_PtrSize + 688, 0)
if (DllCall("shell32\SHGetFileInfoW", "str", ImagePath, "uint", 0, "ptr", SHFILEINFOW, "uint", SHFILEINFOW.Size, "uint", 0x0101, "ptr"))
{
hIcon := NumGet(SHFILEINFOW, 0, "ptr")
IconNumber := DllCall("comctl32\ImageList_ReplaceIcon", "ptr", ImageListID1, "int", -1, "ptr", hIcon) + 1
DllCall("comctl32\ImageList_ReplaceIcon", "ptr", ImageListID2, "int", -1, "ptr", hIcon)
DllCall("user32\DestroyIcon", "ptr", hIcon)
}
}
}
ROW["IconNumber"] := IconNumber ? IconNumber : 9999999
TABLE[ProcessID] := ROW
}
}
return TABLE
}
return false
}
GetExtendedTcpTable(PROCESS_TABLE, Resolve := false)
{
static AF_INET := 2
static ERROR_INSUFFICIENT_BUFFER := 122
static NO_ERROR := 0
static TCP_TABLE_OWNER_MODULE_ALL := 8
static TCP_STATE := ["Closed", "Listen", "Syn Sent", "Syn Received", "Established", "Fin Wait 1", "Fin Wait 2", "Close Wait", "Closing", "Ack", "Time Wait", "Delete TCB"]
TCP := Buffer(4, 0)
if (DllCall("iphlpapi\GetExtendedTcpTable", "ptr", TCP, "uint*", &Size := 0, "int", 0, "uint", AF_INET, "uint", TCP_TABLE_OWNER_MODULE_ALL, "uint", 0) = ERROR_INSUFFICIENT_BUFFER)
{
TCP := Buffer(Size, 0)
if (DllCall("iphlpapi\GetExtendedTcpTable", "ptr", TCP, "uint*", Size, "int", 0, "uint", AF_INET, "uint", TCP_TABLE_OWNER_MODULE_ALL, "uint", 0) = NO_ERROR)
{
TCP_TABLE := Map()
NumEntries := NumGet(TCP, 0, "uint")
loop NumEntries
{
TCP_ROW := Map(), ModuleName := ""
Offset := 8 + ((A_Index - 1) * 160)
TCP_ROW["State"] := TCP_STATE[NumGet(TCP, Offset, "uint")]
TCP_ROW["LocalAddr"] := InetNtopW(AF_INET, TCP.Ptr + Offset + 4)
TCP_ROW["LocalPort"] := ntohs(NumGet(TCP, Offset + 8, "uint"))
RemoteAddr := InetNtopW(AF_INET, TCP.Ptr + Offset + 12)
RemoteAddrResolved := Resolve ? DnsQueryW(Reverse_IPv4(RemoteAddr)) : RemoteAddr
TCP_ROW["RemoteAddr"] := RemoteAddrResolved ? RemoteAddrResolved : RemoteAddr
RemotePort := ntohs(NumGet(TCP, Offset + 16, "uint"))
TCP_ROW["RemotePort"] := (Resolve && PORTS.Has(RemotePort)) ? PORTS[RemotePort] : RemotePort
TCP_ROW["OwningPID"] := OwningPID := NumGet(TCP, Offset + 20, "uint")
TCP_ROW["ProcessName"] := OwningPID ? PROCESS_TABLE[OwningPID]["ExeFile"] : "[Time Wait]"
TCP_ROW["CreateTimestamp"] := CreateTime(NumGet(TCP, Offset + 28, "uint") << 32 | NumGet(TCP, Offset + 32, "uint"))
TCP_ROW["ModuleName"] := GetOwnerModuleFromTcpEntry(TCP.Ptr + Offset)
TCP_ROW["IconNumber"] := OwningPID ? PROCESS_TABLE[OwningPID]["IconNumber"] : 9999999
TCP_ROW["Protocol"] := "TCP"
TCP_TABLE[A_Index] := TCP_ROW
}
}
return TCP_TABLE
}
return false
}
GetExtendedTcp6Table(PROCESS_TABLE, Resolve := false)
{
static AF_INET6 := 23
static ERROR_INSUFFICIENT_BUFFER := 122
static NO_ERROR := 0
static TCP_TABLE_OWNER_MODULE_ALL := 8
static TCP_STATE := ["Closed", "Listen", "Syn Sent", "Syn Received", "Established", "Fin Wait 1", "Fin Wait 2", "Close Wait", "Closing", "Ack", "Time Wait", "Delete TCB"]
TCP6 := Buffer(4, 0)
if (DllCall("iphlpapi\GetExtendedTcpTable", "ptr", TCP6, "uint*", &Size := 0, "int", 0, "uint", AF_INET6, "uint", TCP_TABLE_OWNER_MODULE_ALL, "uint", 0) = ERROR_INSUFFICIENT_BUFFER)
{
TCP6 := Buffer(Size, 0)
if (DllCall("iphlpapi\GetExtendedTcpTable", "ptr", TCP6, "uint*", Size, "int", 0, "uint", AF_INET6, "uint", TCP_TABLE_OWNER_MODULE_ALL, "uint", 0) = NO_ERROR)
{
TCP6_TABLE := Map()
NumEntries := NumGet(TCP6, 0, "uint")
loop NumEntries
{
TCP6_ROW := Map(), ModuleName := ""
Offset := 8 + ((A_Index - 1) * 192)
TCP6_ROW["LocalAddr"] := InetNtopW(AF_INET6, TCP6.Ptr + Offset)
TCP6_ROW["LocalScopeId"] := ntohl(NumGet(TCP6, Offset + 16, "uint"))
TCP6_ROW["LocalPort"] := ntohs(NumGet(TCP6, Offset + 20, "uint"))
RemoteAddr := InetNtopW(AF_INET6, TCP6.Ptr + Offset + 24)
RemoteAddrResolved := Resolve ? DnsQueryW(Reverse_IPv4(RemoteAddr)) : RemoteAddr
TCP6_ROW["RemoteAddr"] := RemoteAddrResolved ? RemoteAddrResolved : RemoteAddr
TCP6_ROW["RemoteScopeId"] := ntohl(NumGet(TCP6, Offset + 40, "uint"))
TCP6_ROW["RemotePort"] := ntohs(NumGet(TCP6, Offset + 44, "uint"))
TCP6_ROW["State"] := TCP_STATE[NumGet(TCP6, Offset + 48, "uint")]
TCP6_ROW["OwningPID"] := OwningPID := NumGet(TCP6, Offset + 52, "uint")
TCP6_ROW["ProcessName"] := OwningPID ? PROCESS_TABLE[OwningPID]["ExeFile"] : "[Time Wait]"
TCP6_ROW["CreateTimestamp"] := CreateTime(NumGet(TCP6, Offset + 60, "uint") << 32 | NumGet(TCP6, Offset + 64, "uint"))
TCP6_ROW["ModuleName"] := GetOwnerModuleFromTcp6Entry(TCP6.Ptr + Offset)
TCP6_ROW["IconNumber"] := OwningPID ? PROCESS_TABLE[OwningPID]["IconNumber"] : 9999999
TCP6_ROW["Protocol"] := "TCPv6"
TCP6_TABLE[A_Index] := TCP6_ROW
}
}
return TCP6_TABLE
}
return false
}
GetExtendedUdpTable(PROCESS_TABLE)
{
static AF_INET := 2
static ERROR_INSUFFICIENT_BUFFER := 122
static NO_ERROR := 0
static UDP_TABLE_OWNER_MODULE := 2
UDP := Buffer(4, 0)
if (DllCall("iphlpapi\GetExtendedUdpTable", "ptr", UDP, "uint*", &Size := 0, "int", 0, "uint", AF_INET, "uint", UDP_TABLE_OWNER_MODULE, "uint", 0) = ERROR_INSUFFICIENT_BUFFER)
{
UDP := Buffer(Size, 0)
if (DllCall("iphlpapi\GetExtendedUdpTable", "ptr", UDP, "uint*", Size, "int", 0, "uint", AF_INET, "uint", UDP_TABLE_OWNER_MODULE, "uint", 0) = NO_ERROR)
{
UDP_TABLE := Map()
NumEntries := NumGet(UDP, 0, "uint")
loop NumEntries
{
UDP_ROW := Map(), ModuleName := ""
Offset := 8 + ((A_Index - 1) * 160)
UDP_ROW["LocalAddr"] := InetNtopW(AF_INET, UDP.Ptr + Offset)
UDP_ROW["LocalPort"] := ntohs(NumGet(UDP, Offset + 4, "uint"))
UDP_ROW["OwningPID"] := OwningPID := NumGet(UDP, Offset + 8, "uint")
UDP_ROW["ProcessName"] := OwningPID ? PROCESS_TABLE[OwningPID]["ExeFile"] : "[Time Wait]"
UDP_ROW["CreateTimestamp"] := CreateTime(NumGet(UDP, Offset + 20, "uint") << 32 | NumGet(UDP, Offset + 24, "uint"))
UDP_ROW["ModuleName"] := GetOwnerModuleFromUdpEntry(UDP.Ptr + Offset)
UDP_ROW["IconNumber"] := OwningPID ? PROCESS_TABLE[OwningPID]["IconNumber"] : 9999999
UDP_ROW["Protocol"] := "UDP"
UDP_ROW["State"] := ""
UDP_ROW["RemoteAddr"] := "*"
UDP_ROW["RemotePort"] := ""
UDP_TABLE[A_Index] := UDP_ROW
}
}
return UDP_TABLE
}
return false
}
GetExtendedUdp6Table(PROCESS_TABLE)
{
static AF_INET6 := 23
static ERROR_INSUFFICIENT_BUFFER := 122
static NO_ERROR := 0
static UDP_TABLE_OWNER_MODULE := 2
UDP6 := Buffer(4, 0)
if (DllCall("iphlpapi\GetExtendedUdpTable", "ptr", UDP6, "uint*", &Size := 0, "int", 0, "uint", AF_INET6, "uint", UDP_TABLE_OWNER_MODULE, "uint", 0) = ERROR_INSUFFICIENT_BUFFER)
{
UDP6 := Buffer(Size, 0)
if (DllCall("iphlpapi\GetExtendedUdpTable", "ptr", UDP6, "uint*", Size, "int", 0, "uint", AF_INET6, "uint", UDP_TABLE_OWNER_MODULE, "uint", 0) = NO_ERROR)
{
UDP6_TABLE := Map()
NumEntries := NumGet(UDP6, 0, "uint")
loop NumEntries
{
UDP6_ROW := Map(), ModuleName := ""
Offset := 8 + ((A_Index - 1) * 176)
UDP6_ROW["LocalAddr"] := NumGet(UDP6, Offset, "uchar")
UDP6_ROW["LocalAddr"] := InetNtopW(AF_INET6, UDP6.Ptr + Offset)
UDP6_ROW["LocalScopeId"] := ntohl(NumGet(UDP6, Offset + 16, "uint"))
UDP6_ROW["LocalPort"] := ntohs(NumGet(UDP6, Offset + 20, "uint"))
UDP6_ROW["OwningPID"] := OwningPID := NumGet(UDP6, Offset + 24, "uint")
UDP6_ROW["ProcessName"] := OwningPID ? PROCESS_TABLE[OwningPID]["ExeFile"] : "[Time Wait]"
UDP6_ROW["CreateTimestamp"] := CreateTime(NumGet(UDP6, Offset + 36, "uint") << 32 | NumGet(UDP6, Offset + 40, "uint"))
UDP6_ROW["ModuleName"] := GetOwnerModuleFromUdp6Entry(UDP6.Ptr + Offset)
UDP6_ROW["IconNumber"] := OwningPID ? PROCESS_TABLE[OwningPID]["IconNumber"] : 9999999
UDP6_ROW["Protocol"] := "UDPv6"
UDP6_ROW["State"] := ""
UDP6_ROW["RemoteAddr"] := "*"
UDP6_ROW["RemotePort"] := ""
UDP6_TABLE[A_Index] := UDP6_ROW
}
}
return UDP6_TABLE
}
return false
}
GetOwnerModuleFromTcpEntry(OWNER_MODULE)
{
static NO_ERROR := 0
static ERROR_INSUFFICIENT_BUFFER := 122
static OWNER_MODULE_INFO_CLASS := 0
OWNER_MODULE_BASIC_INFO := Buffer(4, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromTcpEntry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", &Size := 0) = ERROR_INSUFFICIENT_BUFFER)
{
OWNER_MODULE_BASIC_INFO := Buffer(Size, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromTcpEntry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", Size) = NO_ERROR)
return StrGet(NumGet(OWNER_MODULE_BASIC_INFO, 0, "ptr"))
}
return ""
}
GetOwnerModuleFromTcp6Entry(OWNER_MODULE)
{
static NO_ERROR := 0
static ERROR_INSUFFICIENT_BUFFER := 122
static OWNER_MODULE_INFO_CLASS := 0
OWNER_MODULE_BASIC_INFO := Buffer(4, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromTcp6Entry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", &Size := 0) = ERROR_INSUFFICIENT_BUFFER)
{
OWNER_MODULE_BASIC_INFO := Buffer(Size, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromTcp6Entry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", Size) = NO_ERROR)
return StrGet(NumGet(OWNER_MODULE_BASIC_INFO, 0, "ptr"))
}
return ""
}
GetOwnerModuleFromUdpEntry(OWNER_MODULE)
{
static NO_ERROR := 0
static ERROR_INSUFFICIENT_BUFFER := 122
static OWNER_MODULE_INFO_CLASS := 0
OWNER_MODULE_BASIC_INFO := Buffer(4, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromUdpEntry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", &Size := 0) = ERROR_INSUFFICIENT_BUFFER)
{
OWNER_MODULE_BASIC_INFO := Buffer(Size, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromUdpEntry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", Size) = NO_ERROR)
return StrGet(NumGet(OWNER_MODULE_BASIC_INFO, 0, "ptr"))
}
return ""
}
GetOwnerModuleFromUdp6Entry(OWNER_MODULE)
{
static NO_ERROR := 0
static ERROR_INSUFFICIENT_BUFFER := 122
static OWNER_MODULE_INFO_CLASS := 0
OWNER_MODULE_BASIC_INFO := Buffer(4, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromUdp6Entry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", &Size := 0) = ERROR_INSUFFICIENT_BUFFER)
{
OWNER_MODULE_BASIC_INFO := Buffer(Size, 0)
if (DllCall("iphlpapi\GetOwnerModuleFromUdp6Entry", "ptr", OWNER_MODULE, "int", OWNER_MODULE_INFO_CLASS, "ptr", OWNER_MODULE_BASIC_INFO, "uint*", Size) = NO_ERROR)
return StrGet(NumGet(OWNER_MODULE_BASIC_INFO, 0, "ptr"))
}
return ""
}
InetNtopW(Family, Addr)
{
VarSetStrCapacity(&AddrString, Size := (Family = 2) ? 32 : 94)
if (DllCall("ws2_32\InetNtopW", "int", Family, "ptr", Addr, "str", AddrString, "uint", Size))
return AddrString
return ""
}
htonl(hostlong)
{
return DllCall("ws2_32\htonl", "uint", hostlong, "uint")
}
htons(hostshort)
{
return DllCall("ws2_32\htons", "ushort", hostshort, "ushort")
}
inet_addr(cp)
{
return DllCall("ws2_32\inet_addr", "astr", cp, "uint")
}
inet_ntoa(addr)
{
return DllCall("ws2_32\inet_ntoa", "uint", addr, "astr")
}
ntohl(netlong)
{
return DllCall("ws2_32\ntohl", "uint", netlong, "uint")
}
ntohs(netshort)
{
return DllCall("ws2_32\ntohs", "ushort", netshort, "ushort")
}
RtlIpv4AddressToStringW(IN_ADDR)
{
Size := VarSetStrCapacity(&StringAddr, 32)
if (DllCall("ntdll\RtlIpv4AddressToStringW", "ptr*", IN_ADDR, "str", StringAddr))
return StringAddr
return false
}
RtlIpv4StringToAddressW(AddrString)
{
static STATUS_SUCCESS := 0
if (DllCall("ntdll\RtlIpv4StringToAddressW", "str", AddrString, "int", 0, "ptr*", 0, "ptr*", &IN_ADDR := 0) = STATUS_SUCCESS)
return IN_ADDR
return false
}
RtlIpv6StringToAddressW(AddrString)
{
static STATUS_SUCCESS := 0
IN6_ADDR := Buffer(16, 0)
if (DllCall("ntdll\RtlIpv6StringToAddressW", "str", AddrString, "ptr*", 0, "ptr", IN6_ADDR) = STATUS_SUCCESS)
return IN6_ADDR
return false
}
Reverse_IPv4(AddrString)
{
if (IN_ADDR := RtlIpv4StringToAddressW(AddrString))
{
IN_ADDR := htonl(IN_ADDR)
if (StringAddr := RtlIpv4AddressToStringW(IN_ADDR))
return StringAddr ".in-addr.arpa"
}
return false
}
Reverse_IPv6(AddrString)
{
if (IN6_ADDR := RtlIpv6StringToAddressW(AddrString))
{
VarSetStrCapacity(&StringAddr, 72)
loop size := 16
{
byte := NumGet(IN6_ADDR, size - A_Index, "uchar")
StringAddr .= Format("{:x}", (byte & 0x0F)) "." Format("{:x}", ((byte & 0xF0) >> 4)) "."
}
return StringAddr "ip6.arpa"
}
return false
}
DnsQueryW(RevIP)
{
static DNS_TYPE_PTR := 0x000c
if (RevIP = "0.0.0.0") || (RevIP = "::") || (RevIP = false)
return false
if !(DllCall("dnsapi\DnsQuery_W", "str", RevIP, "short", DNS_TYPE_PTR, "uint", 0, "ptr", 0, "ptr*", &DNS_RECORD := 0, "ptr", 0))
{
if (NumGet(DNS_RECORD, A_PtrSize * 2, "ushort") = DNS_TYPE_PTR)
{
DNS_RECORD_LIST := []
addr := DNS_RECORD
while (addr)
{
DNS_RECORD_LIST.Push(StrGet(NumGet(addr, (A_PtrSize * 2) + 16, "ptr")))
addr := NumGet(addr, "ptr")
}
DllCall("dnsapi\DnsRecordListFree", "ptr", DNS_RECORD, "int", 1)
loop DNS_RECORD_LIST.Length
HOSTNAMES .= DNS_RECORD_LIST[A_Index] " | "
return SubStr(HOSTNAMES, 1, -3)
}
DllCall("dnsapi\DnsRecordListFree", "ptr", DNS_RECORD, "int", 1)
}
return false
}
CreateTime(FileTime)
{
if !(FileTime)
return ""
SystemTime := Buffer(16, 0)
if (DllCall("kernel32\FileTimeToSystemTime", "int64*", FileTime, "ptr", SystemTime))
{
LocalTime := Buffer(16, 0)
if (DllCall("kernel32\SystemTimeToTzSpecificLocalTime", "ptr", 0, "ptr", SystemTime, "ptr", LocalTime))
{
return Format("{:04}-{:02}-{:02} {:02}:{:02}:{:02}"
, NumGet(LocalTime, 0, "ushort")
, NumGet(LocalTime, 2, "ushort")
, NumGet(LocalTime, 6, "ushort")
, NumGet(LocalTime, 8, "ushort")
, NumGet(LocalTime, 10, "ushort")
, NumGet(LocalTime, 12, "ushort"))
}
return false
}
return false
}
NetStat()
{
Interval := (DDL1.Value = 1) ? 2000 : (DDL1.Value = 2) ? 5000 : (DDL1.Value = 3) ? 10000 : 5000
LV_TABLE := []
ResolveAddr := CB6.Value
SetTimer NetStat, Interval
if !(PROCESS_TABLE := Process32())
{
Main.Opt("+OwnDialogs")
MsgBox("Process32 failed", "TCPView Error", "T5 16")
ExitApp
}
if (CB1.Value)
{
if !(TCP_TABLE := GetExtendedTcpTable(PROCESS_TABLE, ResolveAddr))
{
Main.Opt("+OwnDialogs")
MsgBox("GetExtendedTcpTable failed", "TCPView Error", "T5 16")
ExitApp
}
for i, v in TCP_TABLE
LV_TABLE.Push(TCP_TABLE[i])
}
if (CB2.Value)
{
if !(TCP6_TABLE := GetExtendedTcp6Table(PROCESS_TABLE, ResolveAddr))
{
Main.Opt("+OwnDialogs")
MsgBox("GetExtendedTcp6Table failed", "TCPView Error", "T5 16")
ExitApp
}
for i, v in TCP6_TABLE
LV_TABLE.Push(TCP6_TABLE[i])
}
if (CB3.Value)
{
if !(UDP_TABLE := GetExtendedUdpTable(PROCESS_TABLE))
{
Main.Opt("+OwnDialogs")
MsgBox("GetExtendedUdpTable failed", "TCPView Error", "T5 16")
ExitApp
}
for i, v in UDP_TABLE
LV_TABLE.Push(UDP_TABLE[i])
}
if (CB4.Value)
{
if !(UDP6_TABLE := GetExtendedUdp6Table(PROCESS_TABLE))
{
Main.Opt("+OwnDialogs")
MsgBox("GetExtendedUdp6Table failed", "TCPView Error", "T5 16")
ExitApp
}
for i, v in UDP6_TABLE
LV_TABLE.Push(UDP6_TABLE[i])
}
LV.Opt("-Redraw")
TableEntries := LV_TABLE.Length
loop TableEntries
{
v := LV_TABLE[A_Index]
if (A_Index > LV.GetCount())
LV.Add("Icon" . v["IconNumber"], v["ProcessName"], v["OwningPID"], v["Protocol"], v["State"], v["LocalAddr"], v["LocalPort"], v["RemoteAddr"], v["RemotePort"], v["CreateTimestamp"], v["ModuleName"])
else
LV.Modify(A_Index, "Icon" . v["IconNumber"], v["ProcessName"], v["OwningPID"], v["Protocol"], v["State"], v["LocalAddr"], v["LocalPort"], v["RemoteAddr"], v["RemotePort"], v["CreateTimestamp"], v["ModuleName"])
}
GetCount := LV.GetCount()
if (TableEntries = 0)
LV.Delete()
if (GetCount > TableEntries)
loop GetCount - TableEntries
LV.Delete(GetCount - A_Index + 1)
LV.Opt("+Redraw")
SB_C2 := 0, SB_C3 := 0, SB_C4 := 0, SB_C5 := 0
loop SB_C1 := LV.GetCount()
{
if (LV.GetText(A_Index, 4) = "Established")
SB_C2++
if (LV.GetText(A_Index, 4) = "Listen")
SB_C3++
if (LV.GetText(A_Index, 4) = "Time Wait")
SB_C4++
if (LV.GetText(A_Index, 4) = "Close Wait")
SB_C5++
}
SB.SetText(" Endpoints: " SB_C1, 1)
SB.SetText("Established: " SB_C2, 2)
SB.SetText("Listening: " SB_C3, 3)
SB.SetText("Time Wait: " SB_C4, 4)
SB.SetText("Close Wait: " SB_C5, 5)
SB.SetText("Update: " StrLower(SubStr(DDL1.Text, 1, -4)), 6)
}
; ===============================================================================================================================
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)