It’s been a while maintaining the proxy services for my work friends who are in Beijing office. These days I tried to collect some basic metrics like online IP addresses and its connections. And I found a very simple way to do it with only netstat and several text process tools.

For instance, I would like to get the clients info connected to port 443:

netstat -ntu \                    # Collect network statistics and very detailed information
    | grep -v LISTEN \            # Remove lines that the status is LISTEN
    | awk '{print $4, $5}' \      # Remove other columns but retain the 4th and 5th ones
    | grep -E '^[0-9\.]+:443' \   # Filter connections to port 443 by a regex expression
    | cut -d' ' -f2 \             # Remove the first column which is server's address
    | cut -d: -f1 \               # Strip the port part from IP addresses
    | sort \                      # Sort results for pipelining to uniq command
    | uniq -c                     # Group the IP addresses and calculate their appearing times (which is the number of connections)

The final shell script looks like:

netstat -ntu | grep -v LISTEN | awk '{print $4, $5}' | grep -E '^[0-9\.]+:443' | cut -d' ' -f2 | cut -d: -f1 | sort | uniq -c

And also the results:

      8 180.xx.xx.74
      1 183.xx.xx.53
     12 218.xx.xx.198
     20 221.xx.xx.37
     32 222.xx.xx.252