태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[본문스크랩] Netcat사용법

ⓣ Network 2008.04.01 15:07
Netcat

목차



Netcat의 소개


  • Netcat(이하 nc로 표기)은 Network connection 에서 raw-data read, write를 할수 있는 유틸리티 프로그램이다. 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 network connection에 읽거나 쓴다. 이것은 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리하지만 반면 해킹에도 이용범위가 매우 넓다.


Options


  • usage: nc [options] [target host] [ports]

  • -n : 호스트 네임과 포트를 숫자로만 입력받는다.

  • -v : verbosity 를 증가 시킨다. 더 많은 정보를 얻을수 있다.

  • -o [filename]: 보내거나 받은 데이터를 헥스덤프하여 파일에 저장한다.

  • -u : TCP connection 대신에 UDP connection 이 이루어 진다.

  • -p [port number or name]: local-port 를 지정한다. 주로 -l 과 같이 사용하게 된다.

  • -s [ip address or DNS]: local ip address 를 지정한다. 모든 플렛폼에서 지원되지는 않는다.

  • -l : listen 모드로 nc을 띠우게 된다. 당연히 target host는 입력하지 않는다. -p와 같이 사용하게 된다. nc를 server 로서 쓸때 사용.

  • -e [filename]: -DGAPING_SECURITY_HOLE 옵션으로 Make 되었을 때 사용가능하다.

    connection 이 이루어 졌을 때 file을 exec 시킨다. -l 과 같이 사용되면 한 instance만을 사용하는 inetd와 비슷하다.

  • -t : -DTELNET 옵션으로 컴파일 되었을 때 사용가능하다. telnetd에 접속이 가능하도록 접속시 telnet과 같은 협상과정을 거친다.

  • -i [interval time]: nc는 일반적으로 8K 씩 데이터를 보내고 받는데 그렇게 Standard input의 한 라인씩 interval time마다 보내게 된다.

  • -z : connection을 이루기위한 최소한의 데이터 외에는 보내지 않도록 하는 옵션.

  • -r : port 지정이 여러개로 되어 있으면 이때 scanning 순서를 randomize하고 (일반적으로 범위로 지정하면 높은 번호의 포트부터 스캔한다) 또한 -p 옵션에서 지정가능한 local port도 randomize한다. 이때 주의 할 것은 -p가 -r을 override 한다는 것이다.

  • -g : ??

  • -G : ??


Using


  • multi-port connection

      nc는 한 호스트에 한 번에 여러 connection 을 만들수 있다. 이 때 다음과 같이 여러개의 포트를 기술할 수 있다.

      nc [target host] 20-30

      이때 std input으로 입력되는 데이터는 한꺼번에 보내지게 된다.

  • port scanning

      target host 의 지정된 범위내에서의 어떤 포트가 어떻게 사용되고 있는 가를 검색할 수 있다.

      nc -v -w 3 -z sparcs.kaist.ac.kr 20-30, 70-90

      위의 명령은 다음 결과와 같이 20-30, 70-90 까지의 포트들에 대한 정보를 보여준다.

      sparcs.kaist.ac.kr [143.248.8.2] 25 (smtp) open
      sparcs.kaist.ac.kr [143.248.8.2] 23 (telnet) open
      sparcs.kaist.ac.kr [143.248.8.2] 21 (ftp) open
      sparcs.kaist.ac.kr [143.248.8.2] 80 (http) open
      sparcs.kaist.ac.kr [143.248.8.2] 79 (finger) open
      sparcs.kaist.ac.kr [143.248.8.2] 70 (gopher) open

      이것보다 더 자세한 정보를 얻고자 할때는

      echo QUIT | nc -v -w 3 [target host] [ports]

      라고 하면 응답이나 에러메세지로부터 버전정보등도 얻을 수 있다.

      [songa@sparcs.kaist.ac.kr] ~ 13 echo QUIT | nc -v -w 3 sparcs 20-30, 70-90
      sparcs.kaist.ac.kr [143.248.8.2] 25 (smtp) open
      220 sparcs.kaist.ac.kr ESMTP Sendmail 8.8.7/8.8.7; Fri, 8 Jan 1999 15:21:36
      +0900
      221 sparcs.kaist.ac.kr closing connection
      sparcs.kaist.ac.kr [143.248.8.2] 23 (telnet) open
      ????????sparcs.kaist.ac.kr [143.248.8.2] 21 (ftp) open
      220 sparcs.kaist.ac.kr FTP server (Version wu-2.4.2-academ[BETA-18](1) Mon Aug 3 19:17:20 EDT 1998) ready.
      221 Goodbye.
      sparcs.kaist.ac.kr [143.248.8.2] 80 (http) open
      sparcs.kaist.ac.kr [143.248.8.2] 79 (finger) open
      finger: QUIT: no such user.
      sparcs.kaist.ac.kr [143.248.8.2] 70 (gopher) open

  • simple data transfer agent

      nc를 이용해 간단한 data 전송을 할 ?있다.

      receiver : nc -l -p 1234 | uncompress -c | tar xvfp -

      sender : tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234

  • substitute of inetd

      nc를 이용해 inetd에 등록하지 않고, 별다른 네트웍 설정 없이 프로그램을 테스트할 수 있다.

      nc -l -p [port] -e [filename]


      /*test.c*/
      #include < stdio.h >
      main(){
      getchar();
      printf("<html><head></head><body>햐하</body></html>n");


      nc -l -p 1234 -e test

      이렇게 하면 간이 www server 도 된다.

  • connection redirecting
      inetd.conf을 아래와 같은 형식으로 고쳐서 다른 서버로 redirecting을 할수 있다.


      www stream tcp nowait /etc/tcpd /bin/nc -w 3 zero 80

      위의 것은 현재 서버에서 http서비스를 zero서버로 redirect시켰다.

  • performance testing
      nc를 이용해서 큰 데이터를 서로 보내고 받음으로써 network의 performance를 테스트할수 있다.

      [songa@sparcs.kaist.ac.kr] /etc 31 > yes AAAA | nc -v -v -l -p 1234 > /dev/nul&
      [1] 3258 3259
      [songa@sparcs.kaist.ac.kr] /etc 32 > listening on [any] 1234 ...
      [songa@sparcs.kaist.ac.kr] /etc 32 >
      [songa@sparcs.kaist.ac.kr] /etc 32 >
      [songa@sparcs.kaist.ac.kr] /etc 32 > yes BBBB | nc sparcs 1234 > /dev/null &
      [2] 3475 3476
      [songa@sparcs.kaist.ac.kr] /etc 33 > connect to [143.248.8.2] from sparcs.kaisac.kr [143.248.8.2] 31844
      [songa@sparcs.kaist.ac.kr] /etc 33 > kill %
      [songa@sparcs.kaist.ac.kr] /etc 34 > sent 23470080, rcvd 21675480



    Reference






    Copyright

    1999 songa SPARCS all right reserved
    Last Updated at 1999.1.8

Trackbacks 0 : Comments 0

Write a comment