开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

计算网络连接数的脚本

简介:
+关注继续查看

#!/usr/bin/python
#?zhaoyun

#?统计连接数

import?re
import?sys
import?string

file?=?'/proc/net/tcp'

'''
00??"ERROR_STATUS",
01??"TCP_ESTABLISHED",
02??"TCP_SYN_SENT",
03??"TCP_SYN_RECV",
04??"TCP_FIN_WAIT1",
05??"TCP_FIN_WAIT2",
06??"TCP_TIME_WAIT",
07??"TCP_CLOSE",
08??"TCP_CLOSE_WAIT",
09??"TCP_LAST_ACK",
0A??"TCP_LISTEN",
0B??"TCP_CLOSING",
'''

class?Tcp_count:
????????def?get_contents(self,file):
????????????????f?=?open(file,"r").readlines()
????????????????return?f


????????def?covert_number(self,number):
????????????????value?=?hex(number)
????????????????return?value

????????def?get_connect(self,port):
????????????????ESTABLISHED?=?[]
????????????????SYN_SENT?=?[]
????????????????SYN_RECV?=?[]
????????????????FIN_WAIT1?=?[]
????????????????FIN_WAIT2?=?[]
????????????????TIME_WAIT?=?[]
????????????????CLOSE?=?[]
????????????????CLOSE_WAIT?=?[]
????????????????CLOSING?=?[]
????????????????port????=?str(self.covert_number(port)).replace("0x","0").upper()
????????????????for?i?in??self.get_contents(file):
????????????????????????c?=?i.split()
????????????????????????p?=?re.findall(r":.*%(port)s"?%?vars(),i)

????????????????????????if?c[3]?==?"01"?and?p:
????????????????????????????????ESTABLISHED.append(c[3])
????????????????????????if?c[3]?==?"02"?and?p:
????????????????????????????????SYN_SENT.append(c[3])
????????????????????????if?c[3]?==?"03"?and?p:
????????????????????????????????SYN_RECV.append(c[3])
????????????????????????if?c[3]?==?'04'?and?p:
????????????????????????????????FIN_WAIT1.append(c[3])
????????????????????????if?c[3]?==?'05'?and?p:
????????????????????????????????FIN_WAIT2.append(c[3])
????????????????????????if?c[3]?==?'06'?and?p:
????????????????????????????????TIME_WAIT.append(c[3])
????????????????????????if?c[3]?==?'07'?and?p:
????????????????????????????????CLOSE.append(c[3])
????????????????????????if?c[3]?==?'08'?and?p:
????????????????????????????????CLOSE_WAIT.append(c[3])
????????????????????????if?c[3]?==?'0B'?and?p:
????????????????????????????????CLOSING.append(c[3])

????????????????return??"ESTABLISHED:\t"???+?str(len(ESTABLISHED))+"?\nSYN_SENT:\t"?+?str(len(SYN_SENT))+\
????????????????????????"\nSYN_RECV:\t"+str(len(SYN_RECV))+"?\nFIN_WAIT1:\t"?+?str(len(FIN_WAIT1))+\
????????????????????????"\nFIN_WAIT2:\t"?+?str(len(FIN_WAIT2))+?"?\nTIME_WAIT:\t"?+?str(len(TIME_WAIT))+\
????????????????????????"\nCLOSE:??\t"?+?str(len(CLOSE))+"?\nCLOSE_WAIT:\t"?+?str(len(CLOSE_WAIT))+\
????????????????????????"\nCLOSING:\t"+str(len(CLOSING))


def?get_param(para,number):
????????c?=?0
????????count?=?0
????????p?=?[]
????????try:
????????????????for?i?in?sys.argv:
????????????????????????if?i?==?para:
????????????????????????????????p.append(sys.argv[c+1])
????????????????????????????????count+=1
????????????????????????c?+=1
????????????????????????if?count?==?int(number):
????????????????????????????????return?string.join(p)

????????except?Exception:
????????????????return?i+'?Parameter?Error'

def?help_():
????????print?'''
????????python?%s?-p?80,443
????????'''?%(sys.argv[0])


p?=?get_param("-p",1)
if?p:
????????a?=?Tcp_count()
????????for?i?in?p.split(","):
????????????????try:
????????????????????????print?"%s?PORT?TCP?CONNECT?STATE"%(i)
????????????????????????print?a.get_connect(int(i))
????????????????????????print?"\n\n"
????????????????except?Exception:
????????????????????????pass
else:
????????help_()

?

?

?

使用方法:

python?1.py?-p?80,443

发个统计连接数的小脚本
$?python?1.py?-p?80,443
80?PORT?TCP?CONNECT?STATE
ESTABLISHED:????77644?
SYN_SENT:???????0
SYN_RECV:???????0?
FIN_WAIT1:??????9558
FIN_WAIT2:??????8260?
TIME_WAIT:??????354354
CLOSE:??????????0?
CLOSE_WAIT:?????0
CLOSING:????????0



443?PORT?TCP?CONNECT?STATE
ESTABLISHED:????1180?
SYN_SENT:???????0
SYN_RECV:???????0?
FIN_WAIT1:??????0
FIN_WAIT2:??????118?
TIME_WAIT:??????2006
CLOSE:??????????0?
CLOSE_WAIT:?????0
CLOSING:????????0?

?


本文转自zhaoyun00 51CTO博客,原文链接:http://blog.51cto.com/zhaoyun/1236051


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《网络是怎么样连接的》 - ADSL
《网络是怎么样连接的》 - ADSL
32 0
OSS signature 计算
场景 通过多个语言版本 OSS SDK 测试,在使用 CDN 结合 OSS 用法时,客户端使用 CDN 域名计算 signature,发起 HEAD 请求,OSS 收到后返回 403 ; 分析: 出现这个问题不区分什么 SDK 都会出现,问题原因是由于客户端发起的 HEAD 请求在通过 CDN 回原到 OSS 时,CDN 回原是用的 GET 请求,而 OSS 收到时就用 GET 请求方式去计算签名,得到的结果肯定和客户端计算不一致,可以升级到阿里云 CDN 处理。
460 0
OSS signature 计算
场景 通过多个语言版本 OSS SDK 测试,在使用 CDN 结合 OSS 用法时,客户端使用 CDN 域名计算 signature,发起 HEAD 请求,OSS 收到后返回 403 ; 分析: 出现这个问题不区分什么 SDK 都会出现,问题原因是由于客户端发起的 HEAD 请求在通过 CDN 回原到 OSS 时,CDN 回原是用的 GET 请求,而 OSS 收到时就用 GET 请求方式去计算签名,得到的结果肯定和客户端计算不一致,可以升级到阿里云 CDN 处理。
4339 0
[转载]html中DTD使用小结
原文链接:http://www.jb51.net/web/36856.html DTD 是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是html文件的验证机制,属于html文件组成的一部分。
916 0
Unix网络编程代码 第13章 守护进程和inetd超级服务器
1. 概述 ?? ?守护进程是在后台运行且不与任何控制终端关联的进程。unix系统通常有很多守护进程在后台运行,执行不同的管理任务。?? ?守护进程没有控制终端通常源于它们由系统初始化脚本启动。然而守护进程也可能从某个终端由用户在shell提示符下键入命令行启动,这样的守护进程必须亲自脱离与控制终端的关联,从而避免与作业控制,终端会话管理,终端产生信号等发生任何不期望的交互,也可以避免在后台运行的守护进程非预期的输出到终端。
687 0
常用的进程计算脚本
#!/bin/bash ps -C $1 -O rss | gawk '{ count ++; sum += $2 }; END {count --; print "Number of processes =",count; print "Memory usage per process =",sum/1024/count, "MB"; print "Total memory usage
680 0
利用shell脚本拒绝TCP连接数大于20的IP
? 最近服务器频繁遭到CC攻击,抓包、分析连接数后,发现单台服务器的并发连接数达到5万多,本想利用iptables的connlimit模块对连接数据进行限制的,无奈我接手的这几台服务器都没打此...
815 0
23703
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
http://www.vxiaotou.com