How to use /dev/tcp and /dev/udp sockets in Linux ?

Today we will look at an interesting feature to use linux TCP and UDP port checking process.

Below two virtual device map provided by Linux.
/dev/tcp/$host/$port
/dev/udp/$host/$port

1. How to use /dev/tcp and /dev/udp vitual paths ?

### Checking DNS 53 port on my local system.
$ echo > /dev/tcp/localhost/53 && echo GOOD || echo "NOT Good"
-bash: connect: Connection refused
-bash: /dev/tcp/localhost/53: Connection refused
NOT Good

### Checking ssh 22 port on my local system
$ echo > /dev/tcp/localhost/22 && echo GOOD || echo "NOT GOOD"
GOOD
$ 

Similarly we can use it to verify UDP port connections.

$ echo > /dev/udp/127.0.0.1/22 && echo GOOD || echo "Not Good"
GOOD

2. Why i see all UDP connections good and TCP connection rejected ?
UDP or User DataGram Protocol is a connectionless protocol, it does not wait for reply packet, hence all packets on UDP is successful.
Hence the tip is to use TCP vitual path i.e. /dev/tcp/ to verify if the port is open and receiving connections.

$ echo > /dev/udp/127.0.0.1/19 && echo GOOD || echo "Not Good"
GOOD
$ echo > /dev/udp/127.0.0.1/18 && echo GOOD || echo "Not Good"
GOOD

$ echo > /dev/tcp/127.0.0.1/18 && echo GOOD || echo "Not Good"
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/18: Connection refused
Not Good

Leave a Reply

Your email address will not be published.