포트 접속가능 여부를 체크할 때 telnet을 사용하곤 했는데 telnet이 없는 서버가 있어서 방법을 찾다가 발견한 툴.

이게 훨씬 킹왕짱임.


netcat은 Linux에서 네트워크 관련 많은 것을 할 수 있게 해주는 가볍지만 강력한 프로그램임.





[포트 접속가능 여부 확인]

// google.com의 443 포트가 접속가능한 지 체크

[root@localhost]# nc -z google.com 443

Connection to google.com 443 port [tcp/https] succeeded!


// google.com의 440~450 포트 사이에 접속가능한 포트 스캔

[root@localhost]# nc -z -w 1 -v google.com 440-450 2>&1 | grep succeeded





[listening server]

// netcat은 listening 서버로도 사용가능.


// 서버에서 2222 포트로 listen

[root@server.com]# nc -l localhost 2222


// 클라이언트에서 서버의 2222 포트로 접속해서 hello 문자열 전송

[root@client.com]# nc server.com 2222

hello


// 서버에서 띄운 shell에 보면 클라이언트에서 보낸 hello 문자열이 찍혀 있음

[root@server.com]# nc -l localhost 2222

hello





[파일전송]

// 서버에서 2222 포트로 listen. 넘어온 데이터는 ./recv.dat 로 저장

[root@server.com]# nc -l localhost 2222 > ./recv.dat


// 클라이언트에서 파일을 읽어 서버로 전송

[root@client.com]# cat ./test.txt | nc server.com 2222


// 서버에서 전송받은 데이터를 recv.dat 에 기록하고 nc 프로세스는 종료됨

// recv.dat 파일을 열어보면 클라이언트에서 전송한 test.txt 파일의 내용이 들어있음을 확인 가능






-l 옵션으로 listening 하는 서버로 실행했을 때, 클라이언트가 접속해서 데이터를 보내고 종료되면 서버도 함께 종료됨.

종료되지 않고 계속 떠 있게 하려면 -k 옵션을 붙여주면 됨.

// 서버에서 2222 포트로 listen. -k 옵션이 함께 있으므로 클라이언트가 접속을 종료해도 서버는 안죽음.

[root@server.com]# nc -k -l localhost 2222


// 클라이언트에서 접속해서 hello 문자열을 보내고 ctrl + C로 종료

[root@client.com]# nc server.com 2222

hello

^C


// 그래도 서버는 살아있음

[root@server.com]# nc -k -l localhost 2222

hello





timeout 설정은 -w 옵션.

// connection timeout 1초 설정

[root@client.com]# nc -w 1 server.com 2222






아래는 nc의 옵션 리스트


-4: IPv4

-6: IPv6

-D: socket 디버깅 가능

-d: STDIN 입력을 읽어들이지 않음

-h: help

-i: send/recv, multiple port 연결 사이의 interval 지정. 

-k: listening 모드로 실행되었을 때 연결이 완료되더라도 프로세스가 종료되지 않도록 하는 옵션. -l 옵션과 함께 사용되지 않으면 에러.

-l: listening 모드로 실행. -p, -s, -z 옵션과 함께 사용되면 에러. -w 옵션은 무시됨.

-n: hostname을 ip로만 지정.

-p: source port 지정. -l 옵션과 함께 사용되면 에러.

-r: source/destination port를 범위로 지정했을 때 랜덤한 순서로 연결시도.

-S: RFC 2385 TCP MD5 signature 옵션.

-s: 패킷을 전송할 IP 지정. -l 옵션과 함께 사용되면 에러.

-T: 연결에 ToS 지정.

-C: CRLF line-ending 전송.

-t: netcat을 telnet session으로 사용가능 하게.

-U: Unix Domain Socket을 사용하도록 지정.

-u: UDP 사용.

-v: verbose output.

-w: connection/stdin timeout 지정. -l 옵션과 함께 사용하면 무시됨. 

-X: proxy version 지정.

-x: proxy server의 hostname, port 지정.

-z: 아무 데이터도 전송하지 않고 listening daemong만 스캔. -l 옵션과 함께 사용하면 에러.









Posted by bloodguy
,