Skip to content

Commit f1154df

Browse files
committed
fix ipv6 addresses decoding from /proc/net/tcp6
1 parent 93878dd commit f1154df

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

proc/fixtures/123/net/tcp6

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
sl local_address remote_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
22
0: 00000000000000000000000000000000:1538 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 999 0 8039433 1 ffff8d477378d580 100 0 0 10 0
3+
1: 000080FE00000000578BCB48ACE6303C:1F90 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 11139979 1 0000000000000000 100 0 0 10 0
4+
2: 0000000000000000FFFF00000100007F:1F91 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 11154515 1 0000000000000000 100 0 0 10 0

proc/net.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,13 @@ func decodeAddr(src []byte) netaddr.IPPort {
9797
if _, err := hex.Decode(port, src[col+1:]); err != nil {
9898
return netaddr.IPPort{}
9999
}
100-
for i, j := 0, len(ip)-1; i < j; i, j = i+1, j-1 {
101-
ip[i], ip[j] = ip[j], ip[i]
100+
101+
var v uint32
102+
for i := 0; i < len(ip); i += 4 {
103+
v = binary.BigEndian.Uint32(ip[i : i+4])
104+
binary.LittleEndian.PutUint32(ip[i:i+4], v)
102105
}
106+
103107
ipp, ok := netaddr.FromStdIP(net.IP(ip))
104108
if !ok {
105109
return netaddr.IPPort{}

proc/proc_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,7 @@ func TestGetSockets(t *testing.T) {
5353
{Inode: "8039432", SAddr: ipp("0.0.0.0:5432"), DAddr: ipp("0.0.0.0:0"), Listen: true},
5454
{Inode: "8134154", SAddr: ipp("172.17.0.3:5432"), DAddr: ipp("172.17.0.4:36332"), Listen: false},
5555
{Inode: "8039433", SAddr: ipp("[::]:5432"), DAddr: ipp("[::]:0"), Listen: true},
56+
{Inode: "11139979", SAddr: ipp("[fe80::48cb:8b57:3c30:e6ac]:8080"), DAddr: ipp("[::]:0"), Listen: true},
57+
{Inode: "11154515", SAddr: ipp("127.0.0.1:8081"), DAddr: ipp("[::]:0"), Listen: true},
5658
}, res)
5759
}

0 commit comments

Comments
 (0)