본문 바로가기
I T/Linux

netstat 명령어 사용법

by 루솨 2015. 8. 30.



netstat -nap (열려 있는 모든 포트)
#netstat -l 또는 netstat -nap | grep LISTEN (LISTEN 되는 모든 포트)
#netstat -nap | grep ESTABLISHED | wc -l ( 모든 서비스 동시 접속자 수)
#netstat -nap | grep :80 | grep ESTABLISHED | wc -l ( 웹 동시 접속자 수)
-a : --all과 같으며 listen되는 소켓정보와 listen되지않는 소켓정보 모두를 보여준다.
 -n : --numeric과 같으며 기호화된 호스트나 포트이름, 유저이름 대신에 숫자로 표시한다. 
         예를 들면 www은 80으로 표기
 -r : --route과 같으며 설정된 라우팅정보를 출력해준다.
 -p : --program과 같으며 실행되고 있는 각 프로그램과 PID정보를 출력해 준다.
 -i : --interface=iface과 같으며 모든 네트워크인터페이스정보를 출력한다.
 -c : --continuous과 같으며 netstat결과를 연속적으로 출력한다.
 -t : tcp를 이용하여 접속한 리스트를 출력
 -u : udp를 이용하여 접속한 리스트를 출력
 -l : --listening과 같으며 현재 listen되고 있는 소켓정보를 출력한다.
 -s : --statistice과 같으며 각 프로토콜에 대한 통계정보를 출력한다. 

포트스캔 명령어로 확인 하는 방법

# TCP 포트 확인 방법
nmap -sT -p 1-65535 localhost 
# UDP 포트 확인 방법
nmap -sU -p 1-65535 localhost
# 네트워크에 열린 포트 확인 
nmap -sX -p 22,53,110 211.239.111.* 

lsof 명령어로 확인 방법

# 모든 네트워크 소켓 확인
lsof -I


 

LISTEN : 클라이언트(사용자)의 접속 요청을기다리는 상태.
SYN_SENT : 클라이언트 응용프로그램이 호스트에 연결을 요청한 상태.
SYN_RECEIVED : 서버가 클라이언트로부터 접속요구를 받아 응답하였지만 확인 메지시를 못받은 상태.
ESTABLISHED : 연결된 상태.
FIN_WAIT1/2,CLOSE_WAIT : 클라이언트에게 종료를 요청한 뒤 회신을 받아 종료중인 상태.
CLOSING : 메지시가 전송중 사라진 상태.
TIME_WAIT : 연결은 종료되었지만 당분간 소켓이 열린상태.
CLOSE : 완전히 종료된 상태.


 

 [netstat 명령어]

netstat -b -v

-b : 
해당 네트워크와 연결된 프로그램 파일(프로세스) 표시
-v : 프로그램 파일(프로세스) 구성 요소 파일 정보 표시


네이버 지식인 등에 올라오는 대다수의 정보는 단순히 아이피 정보와 포트 정보만을 제시하고 있지만, 여기서 제시하는 [netstat -b -v] 명령어를 사용할 경우 더욱 세부적인 정보를 통해 연결된 네트워크를 사용하는 프로그램 파악 및 해당 프로세스와 연결된 부속 파일 정보를 확인하여 추가적인 확인이 가능할 수 있습니다.

물론 더욱 핵심적인 사항은 단순히 파일 경로와 이름만으로는 확정적으로 해킹 여부를 판단할 수 없지만, 이런 정보를 통해 타인에게 질문을 하시는 것이 실질적으로 올바른 질문 방법이 아닐까 생각됩니다.

마지막으로 8080번 포트의 경우 해당 포트는 정상적인 Web Server, Application Server 등에서 다양하게 사용할 수 있습니다.

특정 악성 프로그램이 해당 포트를 주로 사용할 수 있겠지만 해당 악성 프로그램만 사용한다는 생각을 버리신다면 단순히 포트 번호에 매달려 자신의 시스템을 의심하는 오해는 없으리라 생각됩니다.

IP 정보, 포트 번호의 경우에는 방화벽(Firewall) 프로그램을 운영하는 경우 특정 공격에 대해 임시적으로 포트를 차단하거나 IP를 차단하는 방식을 통해 공격을 방어할 수 있겠지만, 해당 포트를 영구적으로 차단한다는 것은 차후 다른 서비스를 이용하는데 있어서 방해적 요소로 작용할 수 있다는 점도 알았으면 합니다.


 


window


netstat -nap tcp | find "LISTEN"


<!--현재 local컴터에 열린 포트를 보여준다.-->


<!--tcp만 보여준다.-->


 

netstat -nap udp | find "LISTEN"


<!--현재 local컴터에 열린 포트를 보여준다.-->

<!--udp만 보여준다.-->



netstat -nao | find "LISTEN"



<!--현재 local컴터에 열린 포트를 보여준다.-->

<!--tcp와 udp둘다 보여준다.-->


 


netstat -nao | find "80"


<!--현재 local컴터에 80포트로 접속한 ip를 보여준다.-->



netstat -nao | find "122:80"



netstat -nao | find "특정아이피:80"


<!--현재 local컴터에 80포트로 특정아이피가 접속한 리스트를 보여준다.-->



netstat -nao | find "80" /c



netstat -nao | find "특정아이피:80" /c


<!--현재 local컴터에 80포트로 접속한 리스트의 수를 보여준다.-->



linux


 netstat -na


<!--해당 컴터에 연결된 컴터의 ip와 열려진 port와 protocal 타입이 나옵니다.-->






 


netstat -nap


<!--해당 컴터에 연결된 컴터의 ip와 열려진 port와 실행되는 데몬명(SID)과 protocal 타입이 나옵니다.-->


 


netstat -nao | grep ESTABLISHED


<!--local컴터에 접속한 IP 리스트가 보입니다.-->



 


netstat -na | grep LISTEN


<!--local컴터의 tcp/udp 열린 포트가 보입니다.-->


 


netstat -nau | grep LISTEN


<!--local컴터의 열린  udp 방식 포트가 보입니다.-->


 


netstat -nat | grep LISTEN


<!--local컴터의 열린 tcp 방식 포트가 보입니다.-->


 


netstat -nao | grep 80


<!--현재 local컴터에 80포트로 접속한 ip를 보여준다.-->


 


netstat -nao | grep 특정아이피:80


<!--현재 local컴터에 80포트로 특정아이피가 접속한 리스트를 보여준다.-->


 


netstat -n|grep -F :80|egrep '(ESTAB|SYN)'|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l


# 해당 포트의 접속상황을 가지고 동시접속자를 체크하는 방법


 


※netstat 의 status는 현재 상태이며 ESTABLISHED는 연결되어있는 상태를 말하며 CLOSED는 이미 연결이 끊어졌음을 말한다. LISTENING은 현재 시스템에서 열려있는 포트며 연결을 기다리는 포트입니다.


 


3.해당 port사용하는 프로그램 종료하기


 


Windows




netstat -nao | grep LISTEN 로 열린 포트를 확인한후 해당 포트가 어떤 프로그램에서 실행되는지 알려면 PID값을 기억한후


tasklist | grep pid 나 tasklist | find "pid" 이나 으로 해당 프로그램명을


알아내어 보안에 위반되는 프로그램이면 window작업관리자에서 해당 프로세서를 죽입니다.



※tasklist는 현재 컴터에서 돌아가는 프로그램명과 메모리사용량,PID가 나옵니다.


※본 자료실에 Fport-5620.exe은 포트PID와 해당 프로그램과 해당 포트가 연결되어 목록으로 나와서 보기 편합니다.


 


Unix or Linux


 


ps -ef | grep 프로세스명 또는 pid


설명


현재 실행되고 있는 프로세서중에서 프로세스명 만을 검색하여 정보를 출력한다.


출력 항목


출력 항목은 실행시킨소유자, pid, ppid, 점유율, 실행했을때의 시간, 실행되고 있는 시간, 실행파일명(위치) 순이다.


ex : nobody   26673  3615  0  05:00  00:00:12 /usr/sbin/apache


안나오는 항목


CPU점유율과 MEM점유율은 안나온다.


사용 예제


ps -ef | grep mysql



ps -ef | grep apache


결과 예제


vmsdev  98978  84210   3  17:30:50 pts/23  0:00 grep mvtm


 


※ pid 는 현재 시스템에서 유일한 프로세스 아이디이며 ppid 는 부모 프로세스 아이디이다.


 


ps -e | grep 프로세서명 또는 pid


설명


ps -ef 보다 좀더 간략하게 나온다.


출력항목


출력항목은 pid, 실행되고 있는 시간, 실행파일명(위치) 순이다.


안나오는 항목


CPU점유율과 MEM점유율은 안나온다.


사용 예제


ps -e | grep mysql



ps -e | grep apache


결과 예제


100310      -  0:07 mvtmtodb.exec


 


ps -ef 와 ps -e 의 차이점


ps -ef 는 검색 프로세서가 없어도 최소 한개의 검색결과는 나오지만 ps -e 는 검색프로세서가 없으면 검색결과가 아무것도 나오지 않는다.


 


ps auxw|more


# ps -ef 보다 자세하게 나오며 CPU, MEM 점유율이 추가되어 나온다.


 


"ps auxw|more" 결과에서 나오는 STAT 항목의 종류와 의미


---------------------------------------------------- 
부호         의   미 
---------------------------------------------------- 
R    수행 가능/수행중 
T    일시 정지 
P    페이지인을 기다림 
D    디스크 입출력 대기 같은 인터럽트 할 수 없는 대기중 
S    20초 미만의 짧게 잠듦 
I    20초 이상의 길게 잠듦 
Z    좀비 프로세스 
----------------------------------------------------


 


pid 값을 이용해 실행중인 프로세서 죽이기


"kill pid값" 명령을 하게 되면 해당 pid값에 해당하는 프로세서가 종료된다.


※ 위의 명령으로 제대로 종료가 안되면 "kill -9 sid값" 과같이 -9 옵션을 붙여 다시 실행한다.


ex : kill -9 pid값


 


4.해당 port 접근차단하기




 


window



해당 포트 막는것은 프로그램을 까시거나 네트웍쪽 등록정보를 보시면 해당 연결속성에서 TCP/IP속성에서 고급/옵션에 속성을 누르시면 해당 포트만 열수 있던가.포트에 해당 하는 보안 항목이 있습니다



linux


lokkit명령으로 보안수준을 활성화로 놓고 사용자설정에서 열고싶은 포트만 지정할수있습니다.하지만 보안수준이 비활성화면 모든 port가 열립니다.