获取某个端口连接数

来源:互联网 发布:淘宝网画眉鸟笼笼衣 编辑:程序博客网 时间:2024/06/05 06:59


#!/usr/bin/python

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 
0 0