Netcat(nc)
- Netcat은 TCP/IP 소켓 프로그래밍을 위한 강력한 명령행 도구로, 서버나 클라이언트 역할을 할 수 있다. 다양한 운영체제에서 실행 가능하며, TCP와 UDP 프로토콜을 지원한다. 이를 통해 소켓 통신에 대한 테스트나 간단한 파일 전송 등을 수행할 수 있다.
- Netcat은 네트워크를 통해 데이터를 송수신하는 유틸리티로, TCP/UDP 소켓을 생성하고 데이터를 읽고 쓸 수 있다. 네트워크에서 데이터를 전송하거나 수신하는데 유용하게 사용된다.
- Netcat은 다양한 운영체제에서 사용할 수 있으며, 간단하면서도 매우 강력한 기능을 제공한다. 일반적으로는 리눅스, 유닉스, 맥 OS 등에서 사용되며, 윈도우에서는 Ncat이라는 버전이 존재한다.
TCP 서버 구성하기
nc -l 8080
위 명령어는 8080번 포트를 Listen하는 TCP 서버를 구성한다. 클라이언트가 해당 서버로 접속할 수 있다.
TCP 클라이언트 접속하기
nc localhost 8080
위 명령어는 localhost의 8080번 포트에 접속하는 TCP 클라이언트를 구성한다.
메시지 전송하기
Hello World!
클라이언트에 접속 후 메시지를 전송할 수 있다.
파일 전송하기
Netcat을 이용해 파일을 전송할 수 있다. 예를 들어, 파일 서버를 구성하려면 다음 명령어를 실행한다.
nc -l 8080 < file.txt
- 위 명령어는 8080번 포트를 Listen하는 TCP 서버를 구성하고, file.txt 파일의 내용을 클라이언트에게 전송한다.
- 클라이언트에서는 다음 명령어를 실행하여 파일을 수신할 수 있다.
nc localhost 8080 > recevied_file.txt
위 명령어는 localhost의 8080번 포트에 접속하는 TCP 클라이언트를 구성하고, 서버로부터 전송된 파일을 received_file.txt 파일로 저장한다.
TCP 포트 스캔
nc -v -w 1 <호스트> <포트번호>
HTTP GET 요청
echo -e "GET / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80
파일 전송
nc -l 1234 < file.txt
nc <호스트> 1234 > file.txt
채팅 프로그램
# 호스트 1에서 실행
nc -l 1234
# 호스트 2에서 실행
nc <호스트 1 IP> 1234
Netcat(nc)의 옵션
- -l : 넷켓을 서버 모드로 실행한다. 클라이언트의 접속을 대기한다. (listen 모드로 port 오픈)
- -p : 포트 번호를 지정한다. (local port 지정)
- -s : 소스 주소를 지정한다. (local ip address 지정)
- -t : TCP 프로토콜을 사용한다. (defualt)
- -u : UDP 프로토콜을 사용한다.
- -v : 자세한 출력을 한다.
- -z : 단순 포트 스캔만 진행한다. (최소한의 데이터로 연결)
- -o : 보내거나 받은 데이터를 헥스덤프하여 파일에 저장
- -4 : IPv4 주소 사용
- -6 : IPv6 주소 사용
- -D : 소캣에서 디버깅 활성화
nc를 이용하여 원격지 80번 포트에 접속하여 HTTP 요청을 보내기
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
- echo 명령어를 이용하여 HTTP 요청을 작성한다.
- -e 옵션을 사용하여 개행 문자(\r\n)를 인식한다.
- nc 명령어를 이용하여 example.com의 80번 포트에 접속한다.
nc를 이용하여 UDP 패킷 보내기
echo "hello" | nc -u -w1 192.168.0.1 1234
- echo 명령어를 이용하여 “hello” 문자열을 작성한다.
- nc 명령어를 이용하여 192.168.0.1의 1234번 포트로 UDP 패킷을 보낸다.
- -u 옵션을 사용하여 UDP 프로토콜을 사용한다.
- -w1 옵션을 사용하여 1초간 대기한 후 패킷을 보낸다. (타임아웃 설정)