Troubleshooting with netcat

netcat is the swiss-army knife of networking. It is an extremely valuable tool to help diagnose any networking errors. You can and should use it often when working on sysadmin and writing code.

openssl s_client provides the same functionality but for encrypted connections.

IPv4 Connections

To test if you are able to establish an IRC connection, you can use netcat or openssl for encrypted connections:

openssl

$ openssl s_client -connect irc.ircnow.org:6697

You will be presented with details from the certificate verification before coming to a blank line if the connection was successful. This is your prompt for beginning the Connection Registration step below.

netcat

$ nc irc.ircnow.org 6667

You will be presented with a blank line if the connection was successful. This is your prompt for the Connection Registration step below.

Connection Registration

Once connected, you need to identify yourself by typing the following. If you are challenged with a ping cookie before completing, ignore it for now and continue entering the registration commands.

NICK newnick
USER newuser 0 * :newuser

If you were challenged with a ping cookie, respond to the PING with PONG followed by the token received in the PING. Use the PONG format as shown below.

PING :12345
PONG 12345

PING and PONG is normally a method for the server to determine if you are still connected, however in this case it is used to mitigate some types of spambots.

WARNING: Do not ever connect to IRC as root. Some networks will gline your entire IP address if you attempt to connect as root because you will appear to be a drone.

If you successfully see the message of the day (MOTD) and other replies from the IRC server, then the IRC connection has succeeded.

IPv6 Connections

openssl

$ openssl s_client -6 -connect irc.ircnow.org:6697

netcat

You can specifically use netcat to test if an IPv6 address is working:

$ nc -s 2001:0db8:: ipv6.ircnow.org 6667

This will cause netcat to bind to the IPv6 address 2001:0db8::. If you configured the IPv6 address 2001:0db8:: correctly, you should be able to see the MOTD.

You should see something like the following from the server's reply:

:irc.example.ircnow.org 396 newnick 2001:0db8:20:b4:f117:2f18:11eb:3a85 :is your displayed hostname now
:newnick!newnick@2001:0db8:20:b4:f117:2f18:11eb:3a85 MODE newnick :+iC

In this case, the vhost is not a nice hostname, which means that either your rDNS or DNS AAAA record is not configured properly. When done properly, you should see something like:

:irc.example.ircnow.org 396 newnick newnick.example.ircnow.org :is your displayed hostname now
:newnick!newnick@newnick.example.ircnow.org MODE newnick :+iC

To check your vhost, type WHOIS newnick:

WHOIS newnick
:irc.example.ircnow.org 311 newnick newnick newnick 2001:0db8:: * :newuser
:irc.example.ircnow.org 312 newnick newnick irc.example.ircnow.org :irc.example.ircnow.org
:irc.example.ircnow.org 378 newnick newnick :is connecting from *@2001:0db8::
:irc.example.ircnow.org 379 newnick newnick :is using modes +iC
:irc.example.ircnow.org 317 newnick newnick 15 1597224116 :seconds idle, signon time
:irc.example.ircnow.org 318 newnick newnick :End of WHOIS list

In this above example, the vhost is not showing up properly. If it shows up properly, you should see something like this:

:irc.example.ircnow.org 311 newnick newnick newnick newnick.example.ircnow.org * :newnick
:irc.example.ircnow.org 312 newnick newnick irc.example.ircnow.org :irc.example.ircnow.org
:irc.example.ircnow.org 378 newnick newnick :is connecting from *@newnick.example.ircnow.org 2001:0db8:20:b4:f8fb:b8fa:9812:2562
:irc.example.ircnow.org 379 newnick newnick :is using modes +iC
:irc.example.ircnow.org 317 newnick newnick 86 1597224404 :seconds idle, signon time
:irc.example.ircnow.org 318 newnick newnick :End of WHOIS list

Joining and Parting Channels

To join a channel:

JOIN #ircnow

To part a channel:

PART #ircnow

Sending Messages

To send a message to a channel or user:

PRIVMSG #ircnow :Hello, world!
PRIVMSG Mom :Look ma, no client!

NickServ

To identify with NickServ:

PRIVMSG Nickserv :identify PASSWORD

Quitting

To quit, just type CTRL+C.