As a replacement to telnet now that has been removed from macOS, netcat can be used.

To test the response from a web server:

echo -en "GET / HTTP/1.0\n\n\n" | nc google.com 80

If using HTTP/1.1 the host will be required:

echo -en "GET / HTTP/1.1\nHost: google.com\n\n" | nc google.com 80

Test to see if port accepts connections:

$ nc -vz google.com 80
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
        outif en1
        src 192.168.1.100 port 50532
        dst 216.58.211.110 port 80
        rank info not available
        TCP aux info available

Connection to google.com port 80 [tcp/http] succeeded!

The -z option is specifies that nc should just scan for listening daemons, without sending any data to them. If using just -v it will keep connection open and ctrl + c could be used to close the connection.

🔗like telnet

To send data instead like where in telnet use the option -t which causes nc to send RFC 854 DON'T and WON'T responses to RFC 854 DO and WILL requests. This makes it possible to use nc to script telnet sessions.

$ nc -vt google.com 80
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
        outif en1
        src 192.168.1.100 port 50532
        dst 216.58.211.110 port 80
        rank info not available
        TCP aux info available

Connection to google.com port 80 [tcp/http] succeeded!
GET /   <------- you write this

🔗scan

To scan a range of ports:

nc -zvn your-target.tld 1-1000

The -n option is to avoid doing any DNS or service lookups

To print the TPC banner of the running service this could be used:

echo "" | nc -vn -w1 -G1 your-target.tld -r 1-1000

The -w1 is for waiting no more than 1 second if the connection and stdin are idle, the echo "" send a black string to the open port and print out any banner received in response.

The -G1 sets the ctp connection timeout to 1 second.

The -r specifies that the source and/or destination ports should chosen randomly instead of sequentially.

https://docs.saltstack.com/en/latest/topics/mine/

🔗listen for connections

To open a port and keep listening on it, useful for testing incoming connections:

nc -lk 8080

To test you can connect to the opened port by doing:

nc -vt 0 8080

0 stands for localhost but you could use the IP (192.168.X.X) for example

🔗transfer a file

On the server where you want to store the file:

nc -l 8080 >  outfile

On the client where you have the file that you want to send:

nc X.X.X.X 8080 < infile