主要用法及详细解释!
(netstat -na命令),本文主要介绍Linux上的netstat工具,然后详细介绍各种网络连接状态。
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -nr
1.netstat命令详细解释
其实我经常用的是netstat -tnl | grep 443(看443端口是否被占用)。如果您当前是root 用户,请使用netstat -pnl | grep 443 (您还可以看到端口443 的PID)。进程占用您计算机上的端口443)。
净统计
功能说明: 显示网络状态。
语法:netstat [-acCeFghilMnNoprstuvVwx] [-A 网络类型] [–ip]
补充说明:可以使用netstat命令来了解整个Linux系统的网络状态。
参数:
-a 或all 显示所有连接的套接字。
-A nettype 或nettype 列出与此网络类型的连接关联的地址。
-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 或programs 显示使用Socket 的程序标识符和程序名称。
-r 或route 显示路由表。
-s或–statistic 显示网络运行信息的统计表。
-t 或tcp 显示TCP 传输协议的连接状态。
-u或-udp 显示UDP传输协议的连接状态。
-v或–verbose 显示指令执行过程。
-V 或-version 显示版本信息。
-w 或-raw 显示RAW 传输协议的连接状态。
-x 或unix 此参数与指定“-A unix”参数具有相同的效果。
-ip 或-inet 该参数与指定“-A inet”参数具有相同的效果。
2.网络连接状态详解
总共有12 种可能的状态,其中前11 种是根据TCP 连接建立的3 路握手和TCP 连接拆除的4 路挥手过程来描述的。
1)、LISTEN: 首先服务器必须打开一个socket来监听,状态为LISTEN。 /* Socket 正在侦听来自远程TCP 端口的连接请求*/
2)、SYN_SENT:客户端通过应用程序调用connect并执行主动打开。然后客户端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: 被动关闭端TCP收到FIN后,发送ACK响应FIN请求(该回执也作为文件结束传递给上层应用程序),并进入CLOSE_WAIT。 /* 远程端已关闭。等待套接字关闭。等待来自本地用户的连接中止请求*/。
7)、FIN_WAIT2:收到ACK后主动关闭结束,进入FIN-WAIT-2。 /* 连接已关闭,套接字正在等待来自远程TCP 的连接中止请求。 */
8) LAST_ACK: 被动关闭终端一段时间后,收到文件结束字符的应用程序调用CLOSE 来关闭连接。这导致TCP也发送FIN并等待对方的ACK。 /* 远程端正在关闭并等待第一个发送的连接。远程TCP 中断。确认请求*/
9)、TIME_WAIT: TCP在主动端收到FIN后,发送ACK包,进入TIME-WAIT状态。 /* 即使套接字关闭后,它仍然在等待处理网络中的数据包。等待足够的时间以确保远程TCP 收到连接中止请求的确认。 */
10)、CLOSING: 比较少见。 /* 两个套接字都已关闭,但在远程TCP 发现连接中断之前,所有数据尚未发送。 */
11)、被动关闭端收到CLOSED: ACK包后,进入关闭状态。连接将被终止。 /* 套接字未在使用中。 */
12)、UNKNOWN: 未知套接字状态。 /* 套接字状态未知*/
SYN:(序列号同步) 该标志仅在3 次握手期间建立TCP 连接时有效。代表一个新的TCP连接请求。
ACK:(确认号)是对TCP 请求的确认,表明对等系统已成功接收所有数据。
FIN:(终止标志,FINish)用于终止一个TCP会话,但相应的端口仍然打开并准备接收后续数据。
PS:TCPView是一个Windows程序,它显示系统上所有TCP和UDP端点的详细列表,包括本地和远程地址以及TCP连接状态。请参阅http://technet.microsoft。com/en-us/sysinternals/bb897437;当然,如果你想详细分析数据包,可以使用更强大的工具,例如嗅探器或Wireshark。
参考:
http://linux.sheup.com/linux/4/31225.html
http://hi.baidu.com/mqbest_come_on/blog/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]} END {for(state 的key) 打印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]’ |
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|头-n20
3.使用tcpdump拦截80端口访问,看看谁的最高。
tcpdump -i eth0 -tnn dst 端口80 -c awk -F”.” ‘{print $1.”$2”.”$3.”$4}’ | 排序-nr |
4.查找更多time_wait连接
netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20
5.查找更多SYN连接
| netstat -an | awk ‘{print $5}’ | 排序
6. 按端口列出进程。
netstat -ntlp 80 | awk ‘{print $7}’ |
网站日志分析第1部分(Apache):
1.获取访问次数前10的IP地址
cat access.log|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|uniq -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 access.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/)’ awk ‘{print $9,$7}’ | 排序
10.统计http状态。
cat access.log |awk ‘{counts[$(9)]+=1} END {for(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 端口80 | ‘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(trfc 的域){printf ‘%s\t%d\n’,域,trfc[域]}}’
如需更高效的Perl 版本,请从:http://docs.linuxtone.org/soft/tools/tr.pl 下载。
数据库
1.查看数据库执行的SQL
/usr/sbin/tcpdump -i eth0 -s 0 -l -w – dst 端口3306 |egrep -i ‘选择|更新|删除|插入|设置|提交|回滚|创建|删除|更改|调用’
系统调试分析
1. 调试命令
strace -p pid
2.跟踪指定进程的PID
gdb -p pid
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/84334.html