Node.js에서 Netcat 포팅. CLI 유틸리티
Node.js 앱에 포함하려면 대신 netcat 패키지를 사용하세요. 이는 독립 실행형 도구로 사용하기 위한 것이지만 netcat의 원래 구현과 완전히 동일하지는 않습니다.
리눅스 | 맥 OS | 윈도우 |
---|---|---|
$ npm install -g nc
$ nc -l -p port [- options] [hostname] [port]
사용 가능한 옵션:
-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-u UDP mode
-U Listen or connect to a UNIX domain socket
-v verbose
-w secs timeout for connects and final net reads (client-side)
-z zero-I/O mode [used for scanning]
$ nc -l -p 2389
$ nc localhost 2389
포트 2389
에 대한 원시 연결을 엽니다.
서버 측 | 클라이언트 측 |
---|---|
nc -l 2389 > test | cat testfile | nc localhost 2389 |
$ nc -w 10 localhost 2389
위의 연결은 10초 후에 종료됩니다.
$ nc -kl 2389
이런 방식으로 클라이언트 연결이 끊어지더라도 서버는 계속 작동됩니다.
훨씬 더 흥미로운 일은 -l
또는 listen
옵션과 -e
또는 execute
옵션을 사용하여 원격 시스템에서 빠른 쉘을 실행하는 것입니다. 연결이 이루어지면 Netcat은 사용자가 선택한 프로그램을 실행하고 해당 프로그램의 stdin
및 stdout
네트워크 연결에 연결합니다.
$ nc -l -p 23 -e /bin/sh
다음 줄과 빈 줄을 포함하는 HTTP 요청 파일 get.txt
만들어 보겠습니다.
GET / HTTP/1.0
Netcat을 사용하여 웹 사이트의 홈 페이지를 검색하려면 다음을 사용하십시오.
$ nc -v www.website.com 80 < get.txt
Netcat이 포트 80에 연결하고 get.txt
파일에 포함된 텍스트를 보낸 다음 웹 서버의 응답을 stdout
으로 출력하는 것을 볼 수 있습니다.
일반적인 시나리오에서는 nc 클라이언트의 연결이 끊어지면 연결을 다시 시도하지 않습니다. --retry <secs>
또는 -R <secs>
매개변수를 사용하면 몇 초 후에 연결을 다시 시도합니다.
$ nc -R 5 localhost 2389
docker가 있는 경우 docker unix 소켓 파일에 연결되는 컨테이너의 이미지를 나열해 보겠습니다.
$ echo -e " GET /images/json HTTP/1.0rn " | nc -U /var/run/docker.sock
추신. 이 예에서는 루트 권한이 필요합니다: sudo su
.
$ mkfifo /tmp/fifo
$ nc -l -k -p 8080 < /tmp/fifo | nc website.com 80 > /tmp/fifo
$ nc -z 192.168.1.100 1-255
-o
옵션을 사용하면 모든 16진수 트래픽을 덤프할 수 있습니다.
$ nc 127.0.0.1 4445 -o /tmp/log.txt
기본적으로 nc 유틸리티가 생성하는 모든 소켓은 TCP 프로토콜이지만 이 유틸리티는 UDP 프로토콜에서도 작동합니다. UDP 프로토콜을 활성화하려면 -u 플래그가 사용됩니다.
서버측 | 클라이언트 측 |
---|---|
nc -u -l -p 2389 | nc -u localhost 2389 |
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
포트 514
에서 192.168.1.111
로 1초의 대기 시간(-w)을 사용하여 UDP(-u)를 통해 파이프합니다.
디버그는 상세 모드와 일치합니다. -v
param 또는 env var DEBUG=nc
사용하여 활성화할 수 있습니다. 이 모듈은 내부적으로 netcat의 노드 구현을 사용하여 DEBUG=netcat:*,nc
사용하여 디버깅합니다.
로코 무솔리노(@roccomuso)