Skip to content

Commit 77e2a1b

Browse files
committed
Fix FindPid for Windows
1 parent f34dd44 commit 77e2a1b

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

common/winiphlpapi/helper.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net"
99
"net/netip"
1010
"os"
11+
"runtime"
1112
"time"
1213
"unsafe"
1314

@@ -95,7 +96,8 @@ func FindPid(network string, source netip.AddrPort) (uint32, error) {
9596
return 0, err
9697
}
9798
for _, row := range udpTable {
98-
if source == netip.AddrPortFrom(DwordToAddr(row.DwLocalAddr), DwordToPort(row.DwLocalPort)) {
99+
if source == netip.AddrPortFrom(DwordToAddr(row.DwLocalAddr), DwordToPort(row.DwLocalPort)) ||
100+
runtime.GOOS == "windows" && DwordToAddr(row.DwLocalAddr) == netip.IPv4Unspecified() && source.Port() == DwordToPort(row.DwLocalPort) {
99101
return row.DwOwningPid, nil
100102
}
101103
}
@@ -105,7 +107,8 @@ func FindPid(network string, source netip.AddrPort) (uint32, error) {
105107
return 0, err
106108
}
107109
for _, row := range udpTable {
108-
if source == netip.AddrPortFrom(netip.AddrFrom16(row.UcLocalAddr), DwordToPort(row.DwLocalPort)) {
110+
if source == netip.AddrPortFrom(netip.AddrFrom16(row.UcLocalAddr), DwordToPort(row.DwLocalPort)) ||
111+
runtime.GOOS == "windows" && netip.AddrFrom16(row.UcLocalAddr) == netip.IPv6Unspecified() && source.Port() == DwordToPort(row.DwLocalPort) {
109112
return row.DwOwningPid, nil
110113
}
111114
}

common/winiphlpapi/iphlpapi_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,21 @@ func TestFindPidTcp6(t *testing.T) {
4545

4646
func TestFindPidUdp4(t *testing.T) {
4747
t.Parallel()
48-
conn, err := net.ListenPacket("udp", "127.0.0.1:0")
48+
conn, err := net.Dial("udp", "127.0.0.1:53")
4949
require.NoError(t, err)
5050
defer conn.Close()
51+
conn.Write([]byte("test"))
5152
pid, err := winiphlpapi.FindPid(N.NetworkUDP, M.AddrPortFromNet(conn.LocalAddr()))
5253
require.NoError(t, err)
5354
require.Equal(t, uint32(syscall.Getpid()), pid)
5455
}
5556

5657
func TestFindPidUdp6(t *testing.T) {
5758
t.Parallel()
58-
conn, err := net.ListenPacket("udp", "[::1]:0")
59+
conn, err := net.Dial("udp", "[::1]:53")
5960
require.NoError(t, err)
6061
defer conn.Close()
62+
conn.Write([]byte("test"))
6163
pid, err := winiphlpapi.FindPid(N.NetworkUDP, M.AddrPortFromNet(conn.LocalAddr()))
6264
require.NoError(t, err)
6365
require.Equal(t, uint32(syscall.Getpid()), pid)

0 commit comments

Comments
 (0)