87 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # The `nc` command
 | ||
|  | 
 | ||
|  | The `nc` (or netcat) command is used to perform any operation involving TCP (Transmission Control Protocol, connection oriented), UDP (User Datagram Protocol, connection-less, no guarantee of data delivery) or UNIX-domain sockets. It can be thought of as swiss-army knife for communication protocol utilities. | ||
|  | 
 | ||
|  | ### Syntax:
 | ||
|  | 
 | ||
|  | ``` | ||
|  | nc [options] [ip] [port] | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Examples:
 | ||
|  | 
 | ||
|  | #### 1. Open a TCP connection to port 80 of host, using port 1337 as source port with timeout of 5s:
 | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ nc -p 1337 -w 5 host.ip 80 | ||
|  | ``` | ||
|  | 
 | ||
|  | #### 2. Open a UDP connection to port 80 on host:
 | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ nc -u host.ip 80 | ||
|  | ``` | ||
|  | 
 | ||
|  | #### 3. Create and listen on UNIX-domain stream socket:
 | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ nc -lU /var/tmp/dsocket | ||
|  | ``` | ||
|  | 
 | ||
|  | #### 4. Create a basic server/client model:
 | ||
|  | 
 | ||
|  | This creates a connection, with no specific server/client sides with respect to nc, once the connection is established. | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ nc -l 1234 # in one console | ||
|  | 
 | ||
|  | $ nc 127.0.0.1 1234 # in another console | ||
|  | ``` | ||
|  | 
 | ||
|  | #### 5. Build a basic data transfer model:
 | ||
|  | 
 | ||
|  | After the file has been transferred, sequentially, the connection closes automatically | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ nc -l 1234 > filename.out # to start listening in one console and collect data | ||
|  | 
 | ||
|  | $ nc host.ip 1234 < filename.in | ||
|  | ``` | ||
|  | 
 | ||
|  | #### 6. Talk to servers:
 | ||
|  | 
 | ||
|  | Basic example of retrieving the homepage of the host, along with headers. | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ printf "GET / HTTP/1.0\r\n\r\n" | nc host.ip 80 | ||
|  | ``` | ||
|  | 
 | ||
|  | #### 7. Port scanning:
 | ||
|  | 
 | ||
|  | Checking which ports are open and running services on target machines. `-z` flag commands to inform about those rather than initiate a connection. | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ nc -zv host.ip 20-2000 # range of ports to check for | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Flags and their Functionalities:
 | ||
|  | 
 | ||
|  | | **Short Flag** | **Description**                                                   | | ||
|  | | -------------- | ----------------------------------------------------------------- | | ||
|  | | `-4`           | Forces nc to use IPv4 addresses                                   | | ||
|  | | `-6`           | Forces nc to use IPv6 addresses                                   | | ||
|  | | `-b`           | Allow broadcast                                                   | | ||
|  | | `-D`           | Enable debugging on the socket                                    | | ||
|  | | `-i`           | Specify time interval delay between lines sent and received       | | ||
|  | | `-k`           | Stay listening for another connection after current is over       | | ||
|  | | `-l`           | Listen for incoming connection instead of initiate one to remote  | | ||
|  | | `-T`           | Specify length of TCP                                             | | ||
|  | | `-p`           | Specify source port to be used                                    | | ||
|  | | `-r`           | Specify source and/or destination ports randomly                  | | ||
|  | | `-s`           | Specify IP of interface which is used to send the packets         | | ||
|  | | `-U`           | Use UNIX-domain sockets                                           | | ||
|  | | `-u`           | Use UDP instead of TCP as protocol                                | | ||
|  | | `-w`           | Declare a timeout threshold for idle or unestablished connections | | ||
|  | | `-x`           | Should use specified protocol when talking to proxy server        | | ||
|  | | `-z`           | Specify to scan for listening daemons, without sending any data   | |