Try to count IPv6 connections

This commit is contained in:
Matt Joiner 2018-02-13 00:48:21 +11:00
parent 4b5203851a
commit 39bde7237e
3 changed files with 24 additions and 7 deletions

View File

@ -441,9 +441,18 @@ func (cl *Client) acceptConnections(l net.Listener, utp bool) {
return return
} }
if utp { if utp {
acceptUTP.Add(1) torrent.Add("accepted utp connections", 1)
} else { } else {
acceptTCP.Add(1) torrent.Add("accepted tcp connections", 1)
}
torrent.Add(fmt.Sprintf("accepted conn with network %q", conn.RemoteAddr().Network()), 1)
remoteIP := missinggo.AddrIP(conn.RemoteAddr())
if remoteIP.To4() != nil {
torrent.Add("accepted conn from ipv4 address", 1)
} else if remoteIP.To16() != nil {
torrent.Add("accepted conn from ipv6 address", 1)
} else {
torrent.Add("accepted conn from unknown ip address type", 1)
} }
if cl.config.Debug { if cl.config.Debug {
log.Printf("accepted connection from %s", conn.RemoteAddr()) log.Printf("accepted connection from %s", conn.RemoteAddr())
@ -455,7 +464,7 @@ func (cl *Client) acceptConnections(l net.Listener, utp bool) {
if cl.config.Debug { if cl.config.Debug {
log.Printf("rejecting connection from %s", conn.RemoteAddr()) log.Printf("rejecting connection from %s", conn.RemoteAddr())
} }
acceptReject.Add(1) torrent.Add("rejected accepted connection", 1)
conn.Close() conn.Close()
continue continue
} }
@ -831,6 +840,9 @@ func (cl *Client) runHandshookConn(c *connection, t *Torrent, outgoing bool) {
c.conn.SetWriteDeadline(time.Time{}) c.conn.SetWriteDeadline(time.Time{})
c.r = deadlineReader{c.conn, c.r} c.r = deadlineReader{c.conn, c.r}
completedHandshakeConnectionFlags.Add(c.connectionFlags(), 1) completedHandshakeConnectionFlags.Add(c.connectionFlags(), 1)
if connIsIpv6(c.conn) {
torrent.Add("completed handshake over ipv6", 1)
}
if !t.addConnection(c, outgoing) { if !t.addConnection(c, outgoing) {
return return
} }

View File

@ -37,10 +37,6 @@ var (
unsuccessfulDials = expvar.NewInt("dialSuccessful") unsuccessfulDials = expvar.NewInt("dialSuccessful")
successfulDials = expvar.NewInt("dialUnsuccessful") successfulDials = expvar.NewInt("dialUnsuccessful")
acceptUTP = expvar.NewInt("acceptUTP")
acceptTCP = expvar.NewInt("acceptTCP")
acceptReject = expvar.NewInt("acceptReject")
peerExtensions = expvar.NewMap("peerExtensions") peerExtensions = expvar.NewMap("peerExtensions")
completedHandshakeConnectionFlags = expvar.NewMap("completedHandshakeConnectionFlags") completedHandshakeConnectionFlags = expvar.NewMap("completedHandshakeConnectionFlags")
// Count of connections to peer with same client ID. // Count of connections to peer with same client ID.

View File

@ -2,8 +2,10 @@ package torrent
import ( import (
"errors" "errors"
"log"
"net" "net"
"github.com/anacrolix/missinggo"
"github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/metainfo"
pp "github.com/anacrolix/torrent/peer_protocol" pp "github.com/anacrolix/torrent/peer_protocol"
) )
@ -123,3 +125,10 @@ func addrCompactIP(addr net.Addr) (string, error) {
} }
return string(ip.To16()), nil return string(ip.To16()), nil
} }
func connIsIpv6(nc net.Conn) bool {
ra := nc.RemoteAddr()
log.Printf("network: %q, string: %q", ra.Network(), ra.String())
rip := missinggo.AddrIP(ra)
return rip.To4() == nil && rip.To16() != nil
}