Selaa lähdekoodia

fix ipv6 addresses decoding from /proc/net/tcp6

Anton Petruhin 4 vuotta sitten
vanhempi
säilyke
f1154dfafc
3 muutettua tiedostoa jossa 10 lisäystä ja 2 poistoa
  1. 2 0
      proc/fixtures/123/net/tcp6
  2. 6 2
      proc/net.go
  3. 2 0
      proc/proc_test.go

+ 2 - 0
proc/fixtures/123/net/tcp6

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

+ 6 - 2
proc/net.go

@@ -97,9 +97,13 @@ func decodeAddr(src []byte) netaddr.IPPort {
 	if _, err := hex.Decode(port, src[col+1:]); err != nil {
 	if _, err := hex.Decode(port, src[col+1:]); err != nil {
 		return netaddr.IPPort{}
 		return netaddr.IPPort{}
 	}
 	}
-	for i, j := 0, len(ip)-1; i < j; i, j = i+1, j-1 {
-		ip[i], ip[j] = ip[j], ip[i]
+
+	var v uint32
+	for i := 0; i < len(ip); i += 4 {
+		v = binary.BigEndian.Uint32(ip[i : i+4])
+		binary.LittleEndian.PutUint32(ip[i:i+4], v)
 	}
 	}
+
 	ipp, ok := netaddr.FromStdIP(net.IP(ip))
 	ipp, ok := netaddr.FromStdIP(net.IP(ip))
 	if !ok {
 	if !ok {
 		return netaddr.IPPort{}
 		return netaddr.IPPort{}

+ 2 - 0
proc/proc_test.go

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