148

I would like to see what ports are open on my machine, e.g. what ports my machine is listening on. E.g. port 80 if I have installed a web server, and so on.

Is there any command for this?

113

nmap Install nmap

Nmap ("Network Mapper") is a free and open source utility for network exploration or security auditing

nmap 192.168.1.33 internal Pc or nmap external ip address

more information man nmap

  • 11
    Thanks, nmap localhost worked great. – Jonas Oct 25 '10 at 13:24
  • 11
    Remember that there is a difference between nmap localhost and nmap 192.168.0.3 (or what ever you machine IP is) – LassePoulsen Oct 25 '10 at 14:47
  • 6
    I think netstat is a better answer to this. netstat will list what the system is listening on directly, and without using an additional application or doing unnecessary calls over localhost or thought the network. – Mathieu Trudel-Lapierre Nov 3 '10 at 1:57
  • 2
    This is stupid. If you have access to the computer, just use netstat -ln. You'll instantly see all the open ports. – Alexis Wilke Oct 8 '16 at 18:51
  • 1
    nmap localhost didn't find services that were bound only to localhost. For example, I run influxd with bind-address:localhost:8086. That didn't show up in sudo nmap localhost, but did show up in sudo netstat -tulpn. – Dan Dascalescu Jan 18 '17 at 17:58
279

I've always used this:

sudo netstat -ntlp | grep LISTEN
  • 4
    sudo netstat -ntlp | grep LISTEN ... use sudo otherwise ... pid will not be printed. – Rafaf Tahsin Aug 28 '16 at 5:14
  • 6
    -l already filters for listening. grep LISTEN won't help beyond hiding 2 lines of header information. – Dan Dascalescu Jan 18 '17 at 19:19
  • 3
    -t: tcp, -l: listening socket, -p: show pid and program name, -n: print 127.0.0.1:80 instead of localhost:http. Reference: linux.die.net/man/8/netstat – Rick Oct 19 '18 at 9:45
  • 1
    install netstat with sudo apt-get install net-tools – RichArt Oct 28 '18 at 22:12
  • 2
    The expanded command is sudo netstat --tcp --listening --programs --numeric. There’s no need to use grep unless you want to eliminate column headers. – Patrick Dark Mar 12 at 7:50
60

Other good ways to find out what ports are listenting and what your firewall rules are:

  • sudo netstat -tulpn

  • sudo ufw status

  • I change the answer to nmap again, the usability of netstat is crap. – Jonas Mar 23 '14 at 17:28
  • 2
    @Jonas: see my comment under the nmap answer. It won't list services that bind to localhost only. – Dan Dascalescu Jan 18 '17 at 17:59
27

To list open ports use the netstat command.

For example:

    $ sudo netstat -tulpn | grep LISTEN
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      5452/dnsmasq    
    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1037/cupsd      
    tcp6       0      0 ::1:631                 :::*                    LISTEN      1037/cupsd

In the above example three services are bound to the loopback address.

IPv4 services bound to the loopback address "127.0.0.1" are only available on the local machine. The equivalent loopback address for IPv6 is "::1". The IPv4 address "0.0.0.0" means "any IP address", which would mean that other machines could potentially connect to any of the locally configured network interfaces on the specific port.

Another method is to use the lsof command:

    $ sudo lsof -nP -i | grep LISTEN
    cupsd     1037   root    9u  IPv6  11276      0t0  TCP [::1]:631 (LISTEN)
    cupsd     1037   root   10u  IPv4  11277      0t0  TCP 127.0.0.1:631 (LISTEN)
    dnsmasq   5452 nobody    5u  IPv4 212707      0t0  TCP 127.0.0.1:53 (LISTEN)

For more details see man netstat or man lsof.

  • 3
    I thought the -l option was to list LISTENing ports. So the grep would be superfluous here?! – Alexis Wilke Oct 8 '16 at 18:53
24

This is enough to show that there is a process listening on IP address 0.0.0.0 (needed so it will reply to any request) on port 80 (standard web server port number). In my case this shows it is the web server lighttpd

$ sudo netstat -ntlp | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN          2495/lighttpd

If you later want to make sure that the only thing you allow through your firewall is port 80 I often use ShieldsUp from www.grc.com to perform a firewall test.

11

sudo iptables -L will list the port rules for your pc. Note that if you are using ufw or shorewall firewalls the output maybe be hard to read. In that case rather use sudo ufw status for example.

This is not very useful on its own as even if a port is open access will still be denied if there is no process listening on that port.

4

If you are looking for continuous monitoring of ports for server machines or local I think you can also use graphical version of nmap i.e Zenmap for more detailed version

Zenmap is the official graphical user interface (GUI) for the Nmap Security Scanner.

Supports available (Linux, Windows, Mac OS X, BSD, etc.)

Have a look to this tool view:

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.