Who opens my UPnP ports?
Recently I turned on UPnP (Universal Plug and Play) to play a bit with it and instantly noticed that someone/something opened some ports in my router and forwarded them to my machine. So of course I wanted to know what’s going on on my network.
First idea “wireshark” but this only gives you information from which port these UPnP stuff goes, it doesn’t tell you the application that initiated these packages. For the curious here is the filter you can use:
udp.dstport == 1900 && http && ip.addr == 192.168.1.100
UPnP uses the SSDP protocol which isn’t implemented by wireshark but you can simply use the http protocol because SSDP is based on HTTPU (yes, HTTPU).
Imagine a picture that shows you that port 4500 and 5353 are open
So port 4500 and 5353 (both UDP) are forwarded to my Mac but which software is behind this? Strangely
lsof -i :4500
lsof -i :5353
Booth show nothing… which means right now nothing is listening on those ports on my machine.
Let’s see which “normal” services listen on those ports. Of course this is not 100 % certain since any program could listen on those ports.
$ grep 4500 /etc/services
ipsec-msft 4500/udp # Microsoft IPsec NAT-T
ipsec-msft 4500/tcp # Microsoft IPsec NAT-T
$ grep 5353 /etc/services
# 5353 Unassigned
mdns 5353/udp # Multicast DNS
mdns 5353/tcp # Multicast DNS
I didn’t do anything with VPN or IPsec so I started googling and found this Apple KB entry which explained to me which services forward those ports and apparently it’s just “Back to My Mac” and some “Bonjour” stuff.
For the case that the service is still up and running on the port the lsof
output would look something like this, where you can easily read the command
and PID
that is listening on a given port:
$ lsof -i :32323
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Python 21495 hashier 3u IPv4 0x23f1441a8dbc1b79 0t0 TCP *:32323 (LISTEN)
In this case I just started a python script which binds to port 32323
.
Some other quick tips of lsof
.
Print established TCP connections:
lsof -P -iTCP -sTCP:ESTABLISHED
Print listening TCP connections:
$ lsof -P -iTCP -sTCP:LISTEN
...
Python 21495 hashier 3u IPv4 0x23f1441a8dbc1b79 0t0 TCP *:32323 (LISTEN)
...
and here we can as well see the listening python TCP server on 32323
. This is a very quick way to find out all the services that are waiting for a connection.