>php教程 >PHP开发 >Netstat 명령에 대한 자세한 설명

Netstat 명령에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-12-15 09:15:531270검색

주요 사용법과 자세한 설명!
(netstat -na 명령), 이 기사에서는 주로 Linux의 netstat 도구에 대해 설명하고 다양한 네트워크 연결 상태에 대해 자세히 설명합니다.
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -nr
1. netstat 명령에 대한 자세한 설명
사실 제가 자주 사용하는 것은 netstat -tnl | 443(포트 443이 사용 중인지 확인), 현재 루트 사용자라면 netstat -pnl | grep 443을 사용하는 것이 좋습니다(로컬 포트 ​​443을 차지하는 프로세스 PID도 표시할 수 있습니다).
netstat
기능 설명: 네트워크 상태를 표시합니다.
구문: netstat [-acCeFghilMnNoprstuvVwx] [-A][--ip]
보조 참고: netstat 명령을 사용하면 전체 Linux 시스템의 네트워크 상태를 알 수 있습니다.
매개변수:
-a 또는 –all 연결된 모든 소켓을 표시합니다.
-a & lt; 네트워크 유형 & gt; 또는-& lt; 네트워크 유형 & gt;
-c 또는 –continuous 네트워크 상태를 연속적으로 나열합니다.
-C 또는 –cache 라우터 구성의 캐시 정보를 표시합니다.
-e 또는 –extend 네트워크에 대한 기타 관련 정보를 표시합니다.
-F 또는 –fib                                                       FIB를 표시합니다.
-g 또는 –groups 멀티캐스트 기능이 있는 그룹 구성원 목록을 표시합니다.
-h 또는 –help 온라인 도움말입니다.
-i 또는 –interfaces 네트워크 인터페이스 정보 양식을 표시합니다.
-l 또는 –listening 모니터링되는 서버의 소켓을 표시합니다.
-M 또는 –masquerade는 가장된 네트워크 연결을 표시합니다.
-n 또는 –numeric 도메인 네임서버를 통하지 않고 IP 주소를 직접 사용합니다.
-N 또는 –netlink 또는 –symbolic 네트워크 하드웨어 주변 장치의 심볼릭 링크 이름을 표시합니다.
-o 또는 –timers 타이머를 표시합니다.
-p 또는 –program 소켓을 사용하고 있는 프로그램 식별 코드와 프로그램 이름을 표시합니다.
-r 또는 –route는 라우팅 테이블을 표시합니다.
-s 또는 –statistice는 네트워크 작업 정보 통계 테이블을 표시합니다.
-t 또는 –tcp는 TCP 전송 프로토콜의 연결 상태를 표시합니다.
-u 또는 –udp는 UDP 전송 프로토콜의 연결 상태를 표시합니다.
-v 또는 –verbose는 명령 실행 프로세스를 표시합니다.
-V 또는 –version은 버전 정보를 표시합니다.
-w 또는 –raw는 RAW 전송 프로토콜의 연결 상태를 표시합니다.
-x 또는 –unix 이 매개변수의 효과는 "-A unix" 매개변수를 지정하는 것과 동일합니다.
–ip 또는 –inet 이 매개변수는 “-A inet” 매개변수를 지정하는 것과 동일한 효과를 갖습니다.

2. 네트워크 연결 상태에 대한 자세한 설명
TCP 연결 수립의 3방향 핸드셰이크와 TCP 연결 끊김의 4방향 웨이브 프로세스에 따라 처음 11가지의 가능한 상태가 설명됩니다. .
1), LISTEN: 먼저 서버가 청취를 위해 소켓을 열어야 하며 상태는 LISTEN입니다./* 소켓은 원격 TCP 포트에서 연결 요청을 청취하고 있습니다.*/

2 ), SYN_SENT: 클라이언트는 active open을 위해 응용 프로그램을 통해 연결을 호출합니다. 그런 다음 클라이언트 tcp는 연결 설정을 요청하기 위해 SYN을 보냅니다. 그 후 상태는 SYN_SENT로 설정됩니다./*소켓이 적극적으로 시도하고 있습니다. 연결 요청을 보낸 후 일치하는 연결 요청을 기다립니다 */

3), SYN_RECV: 서버는 클라이언트의 SYN을 확인하기 위해 ACK를 보내고 동시에 SYN을 보내야 합니다. 그 후 상태는 SYN_RECV/* 네트워크에서 연결 요청이 수신되었습니다. 연결 요청을 수신하고 보낸 후 연결 요청 확인을 기다리는 중입니다.*/

4), ESTABLISHED: 열린 연결을 나타내며 양 당사자가 이미 데이터를 교환할 수 있거나 교환하고 있습니다. /* 소켓에 연결이 설정되어 있고 사용자에게 데이터가 전송될 수 있음을 나타냅니다. */

5), FIN_WAIT1: 활성 닫기(active close) 최종 응용 프로그램이 close를 호출하므로 해당 TCP가 FIN 요청을 발행하여 연결을 적극적으로 닫은 다음 FIN_WAIT1 상태로 들어갑니다./* 소켓이 닫히고 연결이 종료됩니다. .원격 TCP 연결 중단 요청을 기다리는 중 또는 이전 연결 중단 요청 확인*/

6), CLOSE_WAIT: 수동 종료(passive close) TCP가 FIN을 수신한 후 이에 대한 응답으로 ACK를 보냅니다. FIN 요청(수신은 파일 끝 문자로 상위 응용 프로그램에도 전달됨)을 입력하고 CLOSE_WAIT를 입력합니다./* 원격 끝이 종료되어 소켓이 닫힐 때까지 기다리고 있습니다. user*/

7 ), FIN_WAIT2: 적극적으로 끝을 닫고 ACK를 받은 후 FIN-WAIT-2로 들어갑니다./* 연결이 닫히고 소켓은 원격 끝에서 종료를 기다리고 있습니다. 원격 TCP의 연결 중단 요청 대기 중*/

8), LAST_ACK: 일정 시간 동안 끝을 수동적으로 닫은 후 파일 끝 문자를 수신한 응용 프로그램은 CLOSE를 호출하여 연결을 닫습니다. . 이로 인해 TCP도 FIN을 보내고 상대방의 ACK를 기다립니다./* 원격 끝이 종료되고 소켓이 원래 전송된 연결을 기다리고 있습니다. 요청 확인 */

9), TIME_WAIT: 활성 종료 측이 FIN을 수신한 후 TCP는 ACK 패킷을 전송하고 TIME-WAIT 상태로 들어갑니다. /* 소켓은 네트워크에 여전히 있는 패킷을 처리하기 위해 대기 중입니다. 원격 TCP가 연결 중단 요청 확인을 받을 수 있도록 충분한 시간을 기다립니다.*/

10), CLOSING: 비교적 드뭅니다./* 두 소켓 모두 종료되었지만 여전히 모든 데이터가 전송되지 않았습니다. 원격 TCP가 연결 중단을 확인하기를 기다리는 중입니다*/

11), CLOSED: ACK 패킷을 수신한 후 수동 폐쇄 끝이 들어갑니다. 폐쇄된 상태. 연결이 종료됩니다./* 소켓이 사용되지 않습니다. 연결 상태가 없습니다. */

12) UNKNOWN: 알 수 없는 소켓 상태입니다. /* 소켓 상태를 알 수 없습니다. */

SYN: (시퀀스 번호 동기화) 이 플래그는 3방향 핸드셰이크가 TCP 연결을 설정할 때만 유효합니다. 새로운 TCP 연결 요청을 나타냅니다.
ACK: (승인 번호)는 TCP 요청에 대한 확인 표시이며, 피어 시스템이 모든 데이터를 성공적으로 수신했다는 메시지도 표시합니다.
FIN: (종료 플래그, FINish)는 TCP 대화를 종료하는 데 사용되지만 해당 포트는 여전히 열려 있으며 후속 데이터를 수신할 준비가 되어 있습니다.

PS: Windows 아래에 작은 도구가 있으면 좋습니다. TCPView는 로컬 및 원격 주소와 TCP 상태를 포함하여 시스템의 모든 TCP 및 UDP 끝점에 대한 자세한 목록을 표시하는 Windows 프로그램입니다. 물론, 데이터 패킷을 자세히 분석하려면 스니퍼 및 Wireshark와 같은 보다 강력한 도구를 사용할 수 있습니다.

참고:

http://linux.sheup.com/linux/4/31225.html

http://hi.baidu.com/mqbest_come_on/ 블로그 /item/18526dcef73d791a00e928e5.html

http://www.daxigua.com/archives/1355


시스템 연결 상태:

1. TCP 연결 상태 보기
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

netstat -n | awk '/^tcp/ {++S[$NF] }; END {for(a in S) print a, S[a]}' 또는
netstat -n | awk '/^tcp/ {++state[$NF]} print key,"t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"t ", arr[k]}'

netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn

netstat -ant ' {print $NF}' | grep -v '[a-z]' | sort | uniq -c

2. 20개의 IP에 대한 요청 수를 찾습니다(일반적으로 공격 소스를 찾는 데 사용됨). >netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn |head -n20

3. tcpdump를 사용하여 포트 80 액세스를 스니핑하여 누가 가장 높은지 확인하세요
tcpdump -i eth0 -tnn dst port 80 -c 1000 | {print $1 ″.”$2″.”$3″.”$4}' | sort | uniq -c | sort -nr |head -20

4. grep TIME_WAIT |awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

5. 더 많은 SYN 연결 찾기
netstat -an | grep SYN | $5}' | '{print $1}' | sort | uniq -nr | more

netstat -ntlp | '{print $7}' | cut -d/ -f1

웹사이트 로그 분석 1(Apache):

1. 접속한 IP 주소 상위 10개를 가져옵니다.
cat 액세스 로그| awk '{print $1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1} END {for( url in counts) print counts[url], url}'

2. 가장 많이 방문한 파일이나 페이지, 상위 20개
cat access.log|awk '{print $11}'|sort| c|sort -nr|head -20

3. 가장 큰 exe 파일 나열(다운로드 사이트 분석 시 일반적으로 사용됨)
cat access.log |awk '($7~/ .exe/){print $10 ” ” $1 ” ” $4 ” ” $7}'|sort -nr|head -20

4. 출력이 200000바이트(약 200kb)보다 크고 해당 파일 발생 횟수가 있는 exe 파일을 나열합니다.
cat access.log |awk '($10 > 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100

5. 로그의 마지막 열에는 페이지 파일 전송 시간이 기록되며, 클라이언트에게 가장 많은 시간이 소요되는 페이지가 나열됩니다.
cat access.log |awk '($7~/.php/){print $NF ” ” $1 ” ” $4 ” ” $7}'|sort -nr|head -100

6. 가장 시간이 많이 걸리는 페이지(60초 이상)와 해당 페이지 발생 횟수
cat 액세스를 나열합니다. log | awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

7. 30초를 초과하는 시간 파일
cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20

8 . 통계 웹사이트 트래픽(G)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'

9. 통계 404 연결
awk ' ($9 ~/404/)' access.log | awk '{print $9,$7}' | sort

10. 통계 http 상태.
cat access.log |awk '{counts[$( 9)]+=1}; END {for(code in counts) 인쇄 코드, counts[code]}'
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn

10. 스파이더 분석
어떤 스파이더가 콘텐츠를 크롤링하는지 확인하세요.
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'

웹사이트 일일 분석 2(Squid)

2. 도메인별 트래픽 통계
zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS = "[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%st%dn",domain,trfc[domain]}}'

더 효율적인 경우 고급 Perl 버전은 여기에서 다운로드하세요: http://docs.linuxtone.org/soft/tools/tr.pl

데이터베이스 장
1. 데이터베이스에서 실행되는 SQL 보기
/usr/ sbin/tcpdump -i eth0 -s 0 -l -w - dst 포트 3306 | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'

시스템 디버그 분석

1. 디버깅 명령
strace -p pid

2. 특정 프로세스의 PID 추적
gdb -p pid


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.