netcat 유틸리티를 사용하기 위한 기능과 기본 기술에 대한 개요입니다. Linux Netcat 명령에서 netcat 유틸리티를 사용하는 유용한 예

하나의 명령(포트 8080)을 사용하여 일반 브라우저를 사용하여 클라이언트에 테스트 HTML 페이지 표시:
(echo -e "HTTP/1.1 200 OK\n콘텐츠 유형: text/html\n\n Hello World";) | NC -vv -l -p 8080
하나의 명령(포트 8080)을 사용하여 일반 브라우저를 사용하여 클라이언트에 파일 전송:
(echo -e "HTTP/1.1 200\nContent-Disposition: attachment; filename=target-name-that-client-will-see\nContent-Type: application/octet-stream\nConnection: close\n"; cat filename- 온디스크) | NC -vv -l -p 8080

NC를 어떻게 사용하나요?

(http://handynotes.ru/2010/01/unix-utility-netcat.html )

몇 가지부터 시작해 보겠습니다. 간단한 예그리고 더 나아가 우리는 그것들을 기본 것으로 사용할 것입니다.
기억하신다면 제가 netcat이 스위스 군용 칼이라고 말씀드린 적이 있습니다. 이 칼이 일반 칼처럼 사용할 수 없다면 무엇일까요? 이것이 일반 텔넷 대신 netcat을 사용할 수 있는 이유입니다.

$nc www.google.com 80

Ctrl+C를 눌러 언제든지 연결을 종료할 수 있고 이진 데이터를 일반(이스케이프 시퀀스 없음, 없음)으로 처리하기 때문에 실제로 일반 텔넷보다 더 편리합니다.
-v 옵션을 추가하면 작업 결과를 더 자세히 표시할 수 있고, (-vv) 옵션을 추가하면 현재 연결 세션 동안 전송된 바이트 수에 대한 통계를 얻을 수 있습니다.
Netcat을 서버로 사용할 수 있습니다. 아래와 같이 실행하면 포트 12345(모든 인터페이스)에서 수신 대기합니다.

$ nc -l -p 12345

이제 이 호스트의 포트 12345에 연결하면 입력하는 모든 내용이 원격 측으로 전송되며 이는 netcat을 채팅 서버로 사용할 수 있음을 알려줍니다. 다음 컴퓨터 중 하나에서 실행하세요.

# IP 10.10.10.10을 사용하는 컴퓨터 A에서
$ nc -l -p 12345

그리고 다른 곳에서 연결하세요:

# 컴퓨터 B에서
$nc 10.10.10.10 12345

이제 양측이 대화할 수 있습니다!
양측이 서로 대화할 수 있는 이러한 유형의 대화는 가능한 사용네트워크 I/O를 위한 nc! 예를 들어 첫 번째 컴퓨터에서 nc를 통해 tar 파이프라인을 실행하고 두 번째 컴퓨터에서 출력을 다른 tar 프로세스로 리디렉션하여 한 컴퓨터에서 다른 컴퓨터로 전체 디렉터리를 보낼 수 있습니다.
IP 192.168.1.10을 사용하는 컴퓨터 A의 /data 디렉터리에서 컴퓨터 B(임의의 IP 사용)로 파일을 전송한다고 가정해 보겠습니다. 간단 해:


$tar -cf - /데이터 | NC -l -p 6666


# 컴퓨터 B에서
$nc 192.168.1.10 6666 | 타르 -xf -

이전 기사에서 설명한 파이프 뷰어와 파이프라인을 결합하여 전송 속도에 대한 통계를 확인하는 것을 잊지 마세요!
단일 파일을 보다 간단하게 보낼 수 있습니다.

# IP가 192.168.1.10인 컴퓨터 A에서
$ 고양이 파일 | NC -l -p 6666


# 컴퓨터 B에서
$nc 192.168.1.10 6666 > 파일

nc를 사용하여 전체 디스크를 복사하고 복원할 수도 있습니다.

# IP가 192.168.1.10인 컴퓨터 A에서
$ 고양이 /dev/hdb | NC -l -p 6666


# 컴퓨터 B에서
$nc 192.168.1.10 6666 > /dev/hdb

참고: "-l" 옵션은 Mac 컴퓨터에서 "-p"와 함께 사용할 수 없습니다! 해결책은 단순히 “-l -p 6666?”을 바꾸는 것입니다. “-l 6666?. 여기처럼:

# 이제 nc는 포트 6666에서 다음을 수신합니다. 맥 컴퓨터
$nc -l 6666

netcat의 일반적인 용도는 포트 검색입니다. Netcat은 이러한 종류의 작업에 가장 적합한 도구는 아니지만 작업을 완료합니다(물론 가장 좋은 도구는 nmap입니다).

$ nc -v -n -z -w 1 192.168.1.2 1-1000
(알 수 없음) 445(microsoft-ds) 열기
(알 수 없음) 139(netbios-ssn) 열기
(알 수 없음) 111(sunrpc) 열려 있음
(불명) 80 (www) 오픈
(알 수 없음) 25(smtp): 연결 시간이 초과되었습니다.
(알 수 없음) 22(ssh) 열기

-n 옵션은 DNS 조회를 방지하고, -z는 서버의 응답을 기다리지 않으며, -w 1? 연결 시간 초과를 1초로 설정합니다.
netcat의 또 다른 중요한 용도는 프록시입니다. 포트와 호스트 모두 전달될 수 있습니다. 이 예를 보세요:

$nc -l -p 12345 | NC www.google.com 80

이 명령은 포트 1234에서 nc를 실행하고 모든 연결을 google.com:80으로 리디렉션합니다. 이제 포트 12345에서 이 컴퓨터에 연결하고 요청하면 응답으로 어떤 데이터도 수신되지 않는다는 것을 알게 될 것입니다. 양방향 채널을 설정하지 않았기 때문에 이는 맞습니다. 두 번째 채널을 추가하면 다른 포트에서 데이터를 받게 됩니다.

$nc -l -p 12345 | NC www.google.com 80 | NC -l -p 12346

포트 12345로 요청을 보낸 후 포트 12346에서 응답 데이터를 받습니다.
아마도 netcat의 가장 강력한 기능은 모든 프로세스를 서버로 실행하는 것입니다.

$ nc -l -p 12345 -e /bin/bash

-e 옵션을 사용하면 입력 및 출력이 네트워크 소켓을 통해 리디렉션됩니다. 이제 포트 12345에서 호스트에 연결하면 bash를 사용할 수 있습니다.
$nc 로컬호스트 12345
라스-라스
총 4288
4 drwxr-xr-x 15 pkrumins 사용자 4096 2009-02-17 07:47 .
4 drwxr-xr-x 4 pkrumins 사용자 4096 2009-01-18 21:22 ..
8 -rw——- 1 pkrumins 사용자 8192 2009-02-16 19:30 .bash_history
4 -rw-r—r— 1 pkrumins 사용자 220 2009-01-18 21:04 .bash_logout

(http://execbit.ru/2011/05/23/netcat/)
1 파일 전송(수신 시스템에서 첫 번째 명령을 실행하고 송신 시스템에서 두 번째 명령을 실행합니다.

$ nc -l 31334 > 파일 이름 $ nc 172.16.69.143 31334< filename

$ nc -f /var/log/messages | nc -l 31334 $ nc 172.16.69.143 31334

3 Telnet 대신 사용하십시오(첫 번째는 Telnet 서버이고 두 번째는 클라이언트입니다).

$ nc -l -p 31334 -e /bin/sh $ nc 172.16.69.143 31334

4 스캔 대상 열린 포트:

$ nc -z execbit.ru 1-1024

5가지 배너 기반 지문 서비스:

$ echo "종료" | NC execbit.ru 1-1024

6 리버스 셸을 구성합니다(첫 번째는 클라이언트이고 두 번째는 서버이지만 셸은 서버에서 클라이언트로 열립니다).

거의 모든 리눅스 배포판눈에 띄지 않는 작은 유틸리티가 있습니다 넷캣또는 단순히 체크 안함. 이 프로그램은 서버 모드에서 연결을 수신하거나 클라이언트 모드에서 서버에 연결하기 위해 TCP 소켓을 생성할 수 있습니다. 실제로 netcat을 서버로 사용할지 클라이언트로 사용할지는 전혀 중요하지 않습니다. netcat의 작업은 stdin에서 데이터를 수집하여 지정된 네트워크 주소로 전송하는 것뿐입니다.

netcat을 사용하는 가장 간단한 예는 클라이언트-서버 채팅을 만드는 것입니다. 이는 채팅을 생성하는 매우 원시적인 방법이지만 이 유틸리티의 작동 방식을 명확하게 보여줍니다. 다음 예에서는 유휴 소켓을 생성하는 시스템(서버)의 IP 주소가 192.168.0.1이라고 가정합니다. 이제 TCP 포트 3333에서 연결을 수신하는 채팅 서버를 만들어 보겠습니다.

$nc -l 3333

이제 우리는 연결할 수 있습니다 이 서버:

$nc 192.168.0.1 3333

이 경우 키보드는 stdin 역할을 합니다. 서버 측 키보드에 입력된 모든 내용은 클라이언트 터미널로 전송되며 그 반대의 경우도 마찬가지입니다.

파일 전송 중

똑같은 방식으로 netcat을 사용하여 두 컴퓨터 간에 파일을 전송할 수 있습니다. 다음 명령을 사용하면 파일 전송을 준비하는 서버를 생성할 수 있습니다.

다음과 같이 다른 컴퓨터에서 backup.iso 파일을 가져올 수 있습니다.

$nc 192.168.0.1 3333 > backup.iso

보시다시피 netcat은 데이터 전송 프로세스에 대한 정보를 표시하지 않습니다. 이는 대용량 파일을 작업할 때 상당히 불편할 수 있습니다. 이 문제를 해결하려면 유틸리티(진행률 뷰어)를 사용할 수 있습니다. 이 예에서는 전송된 데이터의 속도와 양에 대한 정보가 서버 측에 실시간으로 표시됩니다.

$ 고양이 백업.iso | PV -b | NC -l 3333

비슷한 방식으로 클라이언트 측에 통계를 표시할 수 있습니다.

$nc 192.168.0.1 3333 | pv -b > backup.iso

다른 예

netcat 유틸리티는 이미지 생성에도 유용할 수 있습니다. 하드 섹션즉석에서 원격 서버로 전송할 수 있는 디스크:

$ dd if=/dev/hdb5 | gzip -9 | NC -l 3333

그리고 원격 시스템에서는 다음과 같이 생성된 이미지를 수락할 수 있습니다.

$nc 192.168.0.1 3333 | pv -b > myhdb5partition.img.gz

파일 그룹(예: 구성 파일 세트)을 보내야 하는 경우 netcat과 tar 아카이버를 결합할 수 있습니다.

$ tar -czf - /etc/ | NC -l 3333

아카이버의 출력을 stdin으로 출력한 다음 netcat으로 리디렉션하려면 tar 매개변수의 파일 이름인 하이픈이 필요합니다. 앞에서 설명한 것과 동일한 방식으로 원격 머신에서 생성된 백업을 수락할 수 있습니다.

$nc 192.168.0.1 3333 | pv -b > mybackup.tar.gz

안전

분명히 netcat을 이런 방식으로 사용하면 정보는 원래의 암호화되지 않은 형식으로 네트워크를 통해 전송됩니다. 중요하지 않은 데이터를 전송하는 경우 이는 상당히 허용되지만 중요한 정보를 전송할 때는 SSH 터널과 함께 netcat을 사용하는 것이 좋습니다.

SSH 터널을 사용하면 두 가지 이점이 있습니다.

  1. 정보는 암호화된 터널 내부로 전송되므로 안전하게 보호됩니다.
  2. SSH를 통해 연결이 설정되므로 방화벽 구성에서 서버의 추가 포트를 열 필요가 없습니다.

서버 측에서 netcat의 파일은 앞에서 설명한 것과 정확히 동일한 방식으로 설정됩니다.

$ 고양이 백업.iso | NC -l 3333

그러나 클라이언트 측에서는 SSH 터널을 통해 연결을 기다리는 netcat 소켓에 연결합니다.

$ ssh -f -L 23333:127.0.0.1:3333 [이메일 보호됨]잠 10; \nc 127.0.0.1 23333 | pv -b > backup.iso

SSH 터널에 연결을 배치하는 다른 방법이 있다는 것은 분명하지만, 이런 방식으로 터널을 생성하고 사용하는 것은 netcat을 통한 데이터 전송이 끝나면 터널이 자동으로 닫히는 유용한 기능이 있습니다.

...그리고 휴대용 포트 스캐너

놀랍게도 netcat을 사용하여 열린 포트를 검색할 수도 있습니다. -z 매개변수는 이를 위해 도움이 될 것입니다:

$ nc -z 192.168.0.1 80-90 192.168.0.1 80 포트 연결 성공!

이 예에서 netcat은 포트 범위 80-90을 검색하고 포트 80이 원격 시스템에 열려 있음을 보고했습니다.

netcat 매뉴얼 페이지에는 다른 여러 가지 내용도 포함되어 있습니다. 유용한 팁그리고 흥미로운 예이 프로그램의 사용.

이번 글에서는 인기를 살펴보겠습니다. 네트워크 유틸리티 netcat과 작업 시 유용한 요령.


Netcat은 TCP 및 UDP 연결을 설정하고 거기에서 데이터를 수신하고 전송할 수 있는 Unix 유틸리티입니다. 유용성과 단순성에도 불구하고, 많은 사람들은 그것을 사용하는 방법을 모르고 당연히 우회합니다.


이 유틸리티를 사용하면 침투 테스트를 수행할 때 몇 가지 단계를 수행할 수 있습니다. 이는 공격받은 시스템에 패키지가 설치되어 있지 않거나 주의를 끌거나 제한 사항(예: IoT/임베디드 장치)이 있는 경우에 유용할 수 있습니다.


Netcat으로 할 수 있는 일:

  • 포트를 스캔하십시오.
  • 포워드 포트;
  • 서비스 배너를 수집하세요.
  • 포트 수신 대기(역방향 연결을 위해 바인딩)
  • 파일 다운로드 및 업로드
  • 원시 HTTP 콘텐츠를 출력합니다.
  • 미니 채팅을 만드세요.

일반적으로 netcat의 도움으로 일부 Unix 유틸리티를 대체할 수 있으므로 이 도구는 특정 작업을 수행하기 위한 일종의 결합 도구로 간주될 수 있습니다.

실제 사례

많은 경우 특정 호스트를 확인해야 할 경우 텔넷이나 자체 서비스 서비스를 사용하여 호스트나 배너를 식별합니다. netcat이 우리를 어떻게 도울 수 있습니까?

열린 TCP 포트 12345를 확인하는 중

$nc -vn 192.168.1.100 12345
nc: 192.168.1.100에 연결 12345(tcp) 실패: 연결이 거부되었습니다.

$nc -v 192.168.1.100 22
192.168.1.100 22포트 접속 성공!
SSH-2.0-OpenSSH

netcat을 사용하여 TCP 포트 스캔:

$ nc -vnz 192.168.1.100 20-24

이러한 스캔을 사용하면 포트에 연결되지 않고 성공적인 연결에 대한 출력만 표시됩니다.


nc: 192.168.1.100 포트 20(tcp)에 대한 connectx 실패: 연결이 거부되었습니다.
nc: 192.168.1.100 포트 21(tcp)에 대한 connectx 실패: 연결이 거부되었습니다.
0개의 연결을 찾았습니다.
1개의 연결을 찾았습니다:
1: 플래그=82
아웃프 en0
src 192.168.1.100 포트 50168
dst 192.168.1.100 포트 22
순위 정보를 사용할 수 없습니다
TCP 보조 정보 사용 가능
192.168.1.100 포트 22번에 연결 성공!
nc: 192.168.1.100 포트 23(tcp)에 대한 connectx 실패: 연결이 거부되었습니다.
nc: 192.168.1.100 포트 24(tcp)에 대한 connectx 실패: 연결이 거부되었습니다.

UDP 포트를 스캔하는 중입니다.

nmap으로 UDP 포트를 스캔하려면 루트 권한이 필요합니다. 해당 항목이 없으면 netcat 유틸리티가 도움이 될 수도 있습니다.


$ nc -vnzu 192.168.1.100 5550-5560
192.168.1.100 포트 5555에 연결 성공!

UDP 패킷 보내기

$ echo -n "foo" | NC -u -w1 192.168.1.100 161

이는 네트워크 장치와 상호 작용할 때 유용할 수 있습니다.

UDP 포트에서 데이터 수신 및 수신된 데이터 출력

$ nc -u 로컬호스트 7777

첫 번째 메시지 이후 출력이 중지됩니다. 여러 메시지를 수락해야 하는 경우 true인 동안을 사용해야 합니다.


$ 사실이지만; nc -u localhost 7777을 수행하십시오. 완료

파일 전송. netcat을 사용하면 파일을 수신하고 원격 호스트로 전송할 수 있습니다.


엔씨 192.168.1.100 5555< 1.txt
nc -lvp 5555 > /tmp/1.txt

간단한 웹 서버로서의 Netcact.

Netcat은 HTML 페이지를 표시하는 간단한 웹 서버 역할을 할 수 있습니다.


$ 사실이지만; nc -lp 8888을 하세요< index.html; done

브라우저 사용: http://netcat 호스트:8888/index.html. 표준 웹 서버 포트 번호 80을 사용하려면 루트 권한으로 nc를 실행해야 합니다.


$ 사실이지만; sudo nc -lp 80을 하세요< test.html; done

노드 간 채팅

첫 번째 노드(192.168.1.100)에서:


$nc -lp 9000

두 번째 노드에서:


$nc 192.168.1.100 9000

명령을 실행하면 임의 노드의 터미널 창에 입력된 모든 문자가 다른 노드의 터미널 창에 나타납니다.

리버스 쉘

netcat을 사용하면 편리한 리버스 쉘을 구성할 수 있습니다.


nc -e /bin/bash -lp 4444

이제 원격 호스트에서 연결할 수 있습니다.


$nc 192.168.1.100 4444

특정 도구가 없다고 해서 포기해서는 안 되며, 종종 상당히 번거롭기도 합니다. 때로는 즉석에서 문제를 해결할 수도 있습니다.

도로설계학과

실험실 작업 No.1

"정보학" 과정에서

그룹 번호 114359 Raikhman Sergey Yurievich의 학생이 작성함

체크됨

실험실 작업 No.1

주제:노턴 커맨더 유틸리티

표적: Norton Commander를 사용하여 컴퓨터를 제어하는 ​​방법 알아보기

Norton Commander를 사용하면 다음 기능을 수행할 수 있습니다. 1) MS-DOS 기능 수행, 2) 디스크의 디렉터리 내용 표시, 3) 디스크의 디렉터리 트리 표시, 4) 파일 보기, 5) 텍스트 파일 편집, 6 ) 파일 복사, 이동, 이름 바꾸기, 삭제, 7) 파일 속성 변경.

시작하다 노턴 커맨더

Norton Commander를 실행하려면 다음을 입력해야 합니다. 명령줄"nc"를 입력하고 "Enter"를 누릅니다. Norton Commander 종료 - F10 또는 ALT+X

화면과 패널의 모습

Norton Commander를 실행하면 두 개의 직사각형 창(패널)이 화면에 나타납니다.


이 패널 아래에는 MS-DOS 프롬프트와 기능 키의 의미가 포함된 정보 줄이 있습니다.

F1 HELP – NC 작동 시 키의 목적에 대한 간략한 정보입니다.

F2 메뉴 – 사용자 메뉴

F3 VIEW – 보기 텍스트 파일, 문서

F4 EDIT – 텍스트 파일 편집

F5 COPY – 파일 복사

F6 RENMOV – 파일 전달, 이름 바꾸기

F7 MKDIR – 디렉토리(하위 디렉토리) 생성

F8 DELETE – 파일이나 하위 디렉터리 삭제

F9 PULL DN – NC 작동 모드가 포함된 메뉴가 화면 상단에 표시됩니다.

F10 QUIT – NC 종료

키 누름 메뉴 F9

왼쪽 및 오른쪽 – 왼쪽 및 오른쪽 패널의 정보 표시 모드를 설정합니다.

파일 - 파일을 사용하여 다양한 작업이 수행됩니다.

명령 – 다양한 NC 명령을 실행하고 NC 구성 및 작동 모드를 설정합니다.

메뉴 항목 중 하나가 강조 표시됩니다. 다른 항목을 선택하려면 화살표를 사용하세요.<¬>, <­>, <®>, <¯>그리고 “Enter” 키를 누르세요.

파일 선택

파일을 복사, 삭제, 이동하려면 Ins 키를 눌러 선택해야 합니다. 선택을 취소하려면 "Ins"를 다시 누르십시오. 선택한 파일 수에 대한 정보가 패널 하단에 나타납니다.

디렉터리 만들기

디렉토리를 생성하려면 “F7” 키를 누르고 이름을 입력한 후 “Enter”를 누르십시오.

디렉토리를 입력하려면 해당 이름에서 "Enter" 키를 누르십시오. "ALT+F10" 키를 누르면 화면에 디렉터리 트리가 표시됩니다. 커서 키를 사용하여 원하는 하위 디렉터리로 빠르게 이동할 수 있습니다.

기본 키 체크 안함

TAB – 다른 패널로 전환

ALT+F1 – 다른 디스크의 목차 왼쪽 패널에 출력합니다.

ALT+F2 – 다른 디스크의 목차 오른쪽 패널에 출력

CTRL+F1 – 화면에서 왼쪽 패널 제거

CTRL+F2 – 화면에서 오른쪽 패널 제거

CTRL+O – 두 패널 모두 제거

CTRL+U – 패널 교체

컴퓨터를 시작하려면 프롬프트 라인에 "LOGIN"을 입력하고 비밀번호(335_2)를 입력해야 합니다.

실험실 과제

명령을 사용하여 디스크에 하위 디렉터리 구조를 만듭니다.


nc [-46bCDdhklnrStUuvZz] [-I 길이] [-나 간격] [-O 길이] [-P 프록시_사용자 이름] [-p 소스_포트] [-q ] [-s 원천] [-T tos키워드] [-V rtable] [-w 시간 초과] [-X 프록시_프로토콜] [-x 프록시_주소[:포트]] [목적지] [포트]

옵션

-4 체크 안함 IPv4 주소만 사용합니다.
-6 체크 안함 IPv6 주소만 사용합니다.
-비 방송을 허용합니다.
-씨 줄 끝으로 보냅니다.
-디 소켓에서 디버깅을 활성화합니다.
-디 stdin 에서 읽으려고 시도하지 마십시오.
-시간 NC 도움말을 인쇄합니다.
-나 길이 TCP 수신 버퍼의 크기를 지정합니다.
-나 간격 보내고 받는 텍스트 줄 사이의 지연 시간 간격을 지정합니다. 또한 여러 포트에 대한 연결 사이에 지연 시간이 발생합니다.
-케이 체크 안함현재 연결이 완료된 후에도 다른 연결을 계속 수신합니다. 이 옵션을 사용하지 않고 사용하면 오류가 발생합니다. -엘옵션.
-엘 이를 지정하는 데 사용됩니다. 체크 안함원격 호스트에 대한 연결을 시작하기보다는 들어오는 연결을 수신해야 합니다. 이 옵션을 다음과 함께 사용하면 오류가 발생합니다. -피, -에스, 또는 -지옵션. 또한 -w옵션은 무시됩니다.
-N 지정된 주소, 호스트 이름 또는 포트에 대해 DNS 또는 서비스 조회를 수행하지 마십시오.
-영형 길이 TCP 전송 버퍼의 크기를 지정합니다.
-피 프록시_사용자 이름 인증이 필요한 프록시 서버에 제공할 사용자 이름을 지정합니다. 사용자 이름을 지정하지 않으면 인증이 시도되지 않습니다. 프록시 인증은 현재 HTTP CONNECT 프록시에만 지원됩니다.
-피 소스_포트 권한 제한 및 가용성에 따라 nc가 사용해야 하는 소스 포트를 지정합니다.
-큐 stdin에서 EOF 후에 지정된 시간(초) 동안 기다린 다음 종료합니다. 초가 음수이면 영원히 기다리십시오.
-아르 자형 소스 또는 대상 포트가 범위 내에서 순차적으로 선택되거나 시스템이 할당하는 순서대로 선택되지 않고 무작위로 선택되어야 함을 지정합니다.
-에스 RFC 2385 TCP MD5 서명 옵션을 활성화합니다.
-에스 원천 패킷을 보내는 데 사용되는 인터페이스를 지정합니다. UNIX 도메인 데이터그램 소켓의 경우 데이터그램을 수신할 수 있도록 만들고 사용할 로컬 임시 소켓 파일을 지정합니다. 이 옵션을 다음과 함께 사용하면 오류가 발생합니다. -엘옵션.
-티 tos키워드 IPv4 TOS 값을 변경합니다. tos키워드다음 중 하나일 수 있습니다. 비판적인, inetcontrol, 저가, 낮은 지연, 넷컨트롤, 처리량, 신뢰할 수 있음또는 DiffServ 코드 포인트 중 하나: 에프, af11 ... af43, cs0 ... cs7; 또는 16진수나 10진수로 된 숫자입니다.
-티 원인 체크 안함 RFC 854 DO 및 WILL 요청에 대해 RFC 854 DON"T 및 WON"T 응답을 보냅니다. 이렇게 하면 nc를 사용하여 텔넷 세션을 스크립트하는 것이 가능해졌습니다.
-유 UNIX 도메인 소켓을 사용하도록 지정합니다.
-유 기본 옵션인 TCP 대신 UDP를 사용합니다. UNIX 도메인 소켓의 경우 스트림 소켓 대신 데이터그램 소켓을 사용하십시오. UNIX 도메인 소켓을 사용하는 경우 임시 수신 소켓은 /tmp에 생성됩니다. -에스플래그가 부여됩니다.
-V rtable 사용할 라우팅 테이블을 설정합니다. 기본값은 0입니다.
-V 가지다 체크 안함더 자세한 출력을 제공합니다.
-w 시간 초과 설정할 수 없거나 유휴 상태인 연결은 시간 초과 초 후에 시간 초과됩니다. 그만큼 -w플래그는 아무런 영향을 미치지 않습니다. -엘옵션, 즉 nc는 연결이 있든 없든 영원히 연결을 수신합니다. -w깃발. 기본값은 시간 초과 없음입니다.
-엑스 프록시_프로토콜 nc가 프록시 서버와 통신할 때 지정된 프로토콜을 사용해야 한다고 요청합니다. 지원되는 프로토콜은 " 4 " (SOCKS v.4) " 5 "(SOCKS v.5) 및 " 연결하다" (HTTPS 프록시). 프로토콜을 지정하지 않으면 SOCKS 버전 5가 사용됩니다.
-엑스 프록시_주소[:포트] 요청합니다 체크 안함프록시를 사용하여 대상에 연결해야 합니다. 프록시_주소그리고 포트. 만약에 포트지정되지 않으면 프록시 프로토콜에 대해 잘 알려진 포트가 사용됩니다(SOCKS의 경우 1080, HTTPS의 경우 3128).
-지 DCCP 모드.
-지 nc가 데이터를 보내지 않고 청취 데몬만 검색하도록 지정합니다. 이 옵션을 다음과 함께 사용하면 오류가 발생합니다. -엘옵션.

목적지숫자로 된 IP 주소이거나 기호화된 호스트 이름일 수 있습니다. -N옵션이 제공됩니다). 일반적으로 목적지를 지정해야 합니다. -엘옵션이 제공됩니다(이 경우 로컬 호스트가 사용됩니다). UNIX 도메인 소켓의 경우 대상이 필요하며 연결(또는 수신 대기)할 소켓 경로입니다. -엘옵션이 제공됩니다).

포트는 단일 정수이거나 포트 범위일 수 있습니다. 범위는 다음과 같은 형식입니다. nn-mm. 일반적으로 대상 포트를 지정해야 합니다. -유옵션이 주어집니다.

클라이언트/서버 모델

다음을 사용하여 매우 기본적인 클라이언트/서버 모델을 구축하는 것은 매우 간단합니다. 체크 안함. 하나의 콘솔에서 시작 체크 안함연결을 위해 특정 포트에서 수신 대기합니다. 예를 들어:

NC -l 1234

nc는 이제 포트에서 수신 대기 중입니다. 1234 연결을 위해. 두 번째 콘솔(또는 두 번째 머신)에서 수신 대기 중인 머신과 포트에 연결합니다.

NC 127.0.0.1 1234

이제 포트 사이에 연결이 있어야 합니다. 두 번째 콘솔에 입력된 내용은 첫 번째 콘솔에 연결되고 그 반대의 경우도 마찬가지입니다. 연결이 설정된 후, 체크 안함어느 쪽이 '서버'로 사용되고 어느 쪽이 '클라이언트'로 사용되는지는 실제로 신경 쓰지 않습니다. EOF(' ^D’).

없다 -씨또는 -이자형최신 netcat의 옵션이지만 파일 설명자를 리디렉션하여 연결이 설정된 후에도 명령을 실행할 수 있습니다. 포트를 열고 연결된 사람이 사이트에서 임의의 명령을 실행하도록 허용하는 것은 위험하므로 여기서 주의하십시오. 정말로 이 작업을 수행해야 하는 경우 다음 예를 참조하세요.

'서버' 측:

Rm -f /tmp/f; mkfifo /tmp/f 고양이 /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

'클라이언트' 측:

Nchost.example.com 1234

(host.example.com의 쉘 프롬프트)

사용하여 시작 체크 안함특정 포트에서 수신 대기하고 출력을 파일로 캡처하려면 다음을 수행하십시오.

Nc -l 1234 > 파일 이름.out

두 번째 컴퓨터를 사용하여 청취에 연결합니다. 체크 안함프로세스에 전송될 파일을 공급합니다.

Nchost.example.com 1234< filename.in

파일이 전송되면 연결이 자동으로 종료됩니다.

서버와 대화하기

사용자 인터페이스를 통하지 않고 "직접" 서버와 통신하는 것이 유용한 경우가 있습니다. 클라이언트가 실행한 명령에 대한 응답으로 서버가 보내는 데이터를 확인해야 할 때 문제 해결에 도움이 될 수 있습니다. 예를 들어 웹사이트의 홈페이지를 검색하려면 다음을 수행하세요.

Printf "GET / HTTP/1.0\r\n\r\n" | NC 호스트.예제.com 80

여기에는 웹 서버에서 보낸 헤더도 표시됩니다. 다음과 같은 도구를 사용하여 필터링할 수 있습니다. sed, 필요하다면.

사용자가 서버에서 요구하는 요청 형식을 알면 더 복잡한 예를 만들 수 있습니다. 또 다른 예로, 다음을 사용하여 이메일을 SMTP 서버에 제출할 수 있습니다.

Nc [-C] 로컬호스트 25<< EOF HELO host.example.com MAIL FROM:< >RCPT 대상:< >DATA 이메일 본문. . 종료 EOF

포트 스캐닝

대상 시스템에서 열려 있고 서비스를 실행 중인 포트를 아는 것이 유용할 수 있습니다. 그만큼 -지플래그를 사용하여 알 수 있음 체크 안함연결을 시작하는 대신 열린 포트를 보고합니다. 일반적으로 이 옵션을 다음과 함께 사용하여 stderr에 대한 자세한 출력을 켜는 것이 유용합니다. -V옵션.

Nc -zvhost.example.com 20-30host.example.com 22포트 접속 성공! host.example.com 25포트 접속 성공!

검색을 포트로 제한하기 위해 포트 범위가 지정되었습니다. 20 - 30 , 오름차순으로 스캔됩니다.

또한 스캔할 포트 목록을 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

Nc -zvhost.example.com 80 20 22 nc:host.example.com에 연결 80(tcp) 실패: 연결이 거부됨 nc:host.example.com에 연결 20(tcp)실패: 연결이 거부됨host.example에 대한 연결 .com 포트가 성공했습니다!

포트는 지정한 순서대로 스캔됩니다.

또는 실행 중인 서버 소프트웨어와 버전을 아는 것이 유용할 수 있습니다. 이 정보는 종종 인사말 배너에 포함됩니다. 이를 검색하려면 먼저 연결을 만든 다음 배너를 검색할 때 연결을 끊어야 합니다. 이는 다음과 같이 작은 시간 제한을 지정하여 수행할 수 있습니다. -w플래그를 지정하거나 서버에 "QUIT" 명령을 실행하면 됩니다.

에코 "종료" | nc host.example.com 20-30 SSH-1.99-OpenSSH_3.6.1p2 프로토콜이 일치하지 않습니다. 220host.example.com IMS SMTP 수신기 버전 0.84 준비됨

nc -p 31337 -w 5 호스트.example.com 42

포트에 대한 TCP 연결을 엽니다. 42 ~의 호스트.예제.com포트 사용 31337 시간 초과가 있는 소스 포트로 5 초.

Nc -u 호스트.예제.com 53 nc -x10.2.3.4:8080 -Xconnect -Pruser 호스트.예제.com 42

위의 예와 동일하지만 이번에는 사용자 이름 "을 사용하여 프록시 인증을 활성화합니다. 루저" 프록시에 필요한 경우.

관련 명령

ifconfig— 네트워크 인터페이스 구성을 보거나 수정합니다.

공유하다