Linux网络连接状态检查

本文介绍了如何使用Linux内置命令及shell技巧检查网络连接状态。包括统计各种连接状态的数量、查看HTTP进程数等实用命令,有助于快速诊断网络问题。

原文在这里:http://suchalin.blog.163.com/blog/static/553046772010511114031481/

统计连接数状态:

 

[root@localhost conf]# netstat -n|awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
LAST_ACK 173
SYN_RECV 35
CLOSE_WAIT 159
ESTABLISHED 152
FIN_WAIT1 29
FIN_WAIT2 10
CLOSING 39
TIME_WAIT 103

 


Linux网络连接状态检查!  

检查linux的网络连接状态其实很简单,利用Linux内置的一些命令和SHELL的几个小技巧就可以完成看似复杂的检查任务,这也是Linux的魅力之一!
最基本的,
netstat -atn
该命令的解释是列出基于TCP协议(-t)的所有连接,并将通信双方以IP地址的(-n)的方式显示,而不是主机名!!
netstat -atn | cut -b 49-75 | grep -o -P "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" | sort | uniq -c | sort -n -r -k 1,7 | head -10
这行命令用来分析netstat的输出结果,最后得出的是目前处于连接中的不同的IP地址;这个命令在Ubuntu(cut -b 45-75)上不能实现,这是不同的Linux对于一些基本命令的实现不同(编译的选项和参数不一致),但是ubuntu上可以用下面的命令实现相似的功能,
netstat -atn | cut -b 45-75 | cut -d':' -f1 |sort | uniq -c | sort -n -r -k 1,7 | head -10
唯一的缺点是不用正则表达式的情况下title内容行也被放了进来,当然还可以用一些命令去除这些文字行,这里就不展开了!
netstat -atn |cut -b 77-90 | sort | uniq -c 是列出每个连接的状态并统计!
对于netstat命令输出的分析其实还有很多方法,这儿就不再列举!
time tcpdump -ns 200 -c 100 '(dst port http or dst port https) and tcp[13] & 2!=0' | grep -o -P '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,5}\s\>' | cut -d '.' -f 1-4 | sort | uniq -c | sort -n -r -k 1,7 | head -25
这个命令是对于100个包中有多少个新连接请求的统计!运用了tcpdump抓取100个(-c 100)包,最后列出这些请求的IP地址。
这里只是两个简单的例子,还有很多命令组合运用的实例可以大大加快我们的工作效率,这些都只要合理运用Linux的命令就可以了!!


查看http进程数:

[root@localhost conf]# ps -ef|grep httpd|wc -l

结果 - 1 (因为包含了grep httpd这个进程)

Linux系统中,ioctls(Input Output Control)是一种系统调用机制,允许用户程序通过特定的文件描述符(通常是/dev/xxx设备文件)来控制硬件设备的行为,包括网络设备。例如,你可以使用ioctl操作来读取网络连接状态信息。 对于网络连接状态,通常涉及到网络套接字相关的ioctls,比如`SIOCINQ`(用于检查有多少未读数据),`SIOCOUTQ`(查看有多少数据待发送),以及`IOCGIFFLAGS`(获取网络接口的标志位,其中包含了连接状态信息等)等。 以下是一个简单的步骤概述: 1. 打开网络设备文件:`int fd = open("/dev/net/tun", O_RDWR);` 2. 发送ioctl请求:`ssize_t result = ioctl(fd, request_number, &arg);` - `request_number`是对应的ioctl命令码,如`SIOCINQ`, `IOCGIFFLAGS`等。 - `arg`是接收返回值的数据结构,可以是指向特定类型的指针。 例如,如果你想检查TUN/TAP设备的连接状态,可能会使用`IOCGIFFLAGS`命令,然后解析返回的`ifreq`结构(包含设备的信息和标志位)来判断连接状态。 ```c struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); sprintf(ifr.ifr_name, "%s", tun_device_name); ioctl(fd, SIOCGIFFLAGS, &ifr); uint flags =ifr.ifr_flags; if (flags & IFF_UP && (flags & IFF_RUNNING)) { // 网络连接处于活跃状态 } ``` 请注意,这只是一个基本示例,实际操作需要根据具体的网络设备和操作进行调整,并可能涉及更复杂的错误处理和数据解析。此外,不是所有的网络设备都支持所有ioctls,所以在使用前应查阅相关文档。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值