Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Thursday, 28 December 2017

Viewing connections in Linux and related information

At first, using the tcpdump utility let's capture a connection from our workstation (client.net):

IP client.net.53058 > server.net.berknet: Flags [P.],i

This is an outbound connection to a server listening on TCP port 2005:

# getentii services berknet
berknet      2005/tcp csync

# grep berknet /etc/services
berknet      2005/tcp csync   # csync for cyrus-imapd

In this article, I will list 3 utilities that can be used in order to view network connections and related information.

1. ss (socket statistics)

# ss -pr | grep berknet
ESTAB   0   0   client.net:53058  server.net:berknet  users:(("python2.6",8665,9))

where 8665 is the process ID, python2.6 is the program name and options:
-p = list process IDs
-r = resolve IP addresses to hostnames

If you don't want to resolve the port number to a service name use the -n option:

# ss -prn | grep 8665
ESTAB   0   0   client.net:53058  server.net:2005  users:(("python2.6",8665,9))

In order to view more information regarding process with ID 8665 run:

# ps 8665
 PID TTY  STAT   TIME COMMAND
8665 ?    Sl     1:50 /usr/bin/python2.6 /usr/local/bin/collectd-proxy.py

where collectd-proxy.py is the application that is generating traffic on TCP port 2005.

By default ss, displays a list of established TCP connections, omitting the connections on ports, on which the server is listening on. Therefore,
• use the option -u (--udp) in order to list only UDP connections.
• use the option -l (--listening) in order to list only the open ports (i.e. the ports on which the server is listening).
• use the option -a (--all) in order to list all connections (TCP, UDP, connected and listening).

For example, ss -au will list all oubound UDP connectionsiii and open UDP ports.

2. lsof (list open files)

# lsof -P | grep :2005
python2.6  8665   IPv4   TCP client.net:53058->server.net:2005 (ESTABLISHED)
i

-P option was used in order to display the port number instead of the service name.

3. netstat (network statistics)

# netstat --numeric-ports -p | grep :2005
tcp   0   0 client.net:53058  server.net:2005    ESTABLISHED 8665/python2.6

where options:
--numeric-ports = display the port number instead of the service name
-p = display the process ID and program name

Additionally,
• use the option -c (or --continuous) in order to keep refreshing the output of. netstat.
• use the option -l in order to list only the open ports.
• use the option -n in order to list only numeric ports and addresses.


i Some information have been omitted from the output in order to make it easier to read.

ii getent (get entries). Note that it can map a port to a service name too, e.g.
# getent services 2005
berknet      2005/tcp csync

iii Inbound UDP connections won't be listed since UDP is a connectionless protocol.