我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Python统计端口TCP连接数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Python统计端口TCP连接数

    此脚本可以用来统计某个端口上连接的IP的数量,统计连接到这一端口的所有IP、最多的IP和次数以及TCP连接状态。

    涉及到Python读取网络连接统计信息以及统计计算的一些基本操作。在编写脚本的过程中预先定义了统计信息的数据结构,在向最终结果中添加统计信息时需要用到list去重功能,因此临时创建了一个列表使用set()函数去重。set()函数不能直接add字典类型,因此先将字典转成可哈希的字符串,再将去重后的字符串转成字典。其中字典、列表和集合都属于不可哈希的类型。

    此脚本可以用于Windows、Linux以及OSX,其中OSX上运行需要使用root权限(由于psutil的原因),使用时直接使用python运行此脚本文件即可。如果提示‘ImportError’,则使用pip安装所缺的模块,非特权用户使用pip安装模块时需要使用sudo。

    脚本内已经设定port为22,可以自己修改代码,使它允许成接收命令行位置参数或者手动输入。

运行效果图如下:

1.使用root用户运行

p_w_picpath 

2.使用非特权用户运行

p_w_picpath

脚本文件可以通过GitHub获取:https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/functions/net/tcp/port/portStatistics.py

脚本内容如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
"""
Created by PyCharm.
File:               LinuxBashShellScriptForOps:portStatistics.py
User:               Guodong
Create Date:        2016/10/27
Create Time:        10:51

Note:
    Usage:
    Using user as you want in Linux/Windows system.
    The python module 'psutil' and 'prettytable' is required, using pip
    install them.
    ```
    pip install psutil prettytable
    ```
    On OSX this function requires root privileges.

    # python portStatistics.py
    Total connections of port 22 is 10.
    +--------------+-------------------+-------------------+-----------------+--------------+
    | Total Counts | Remote IP Address | Established Conns | Time_wait Conns | Others Conns |
    +--------------+-------------------+-------------------+-----------------+--------------+
    |      5       |     10.6.28.46    |         5         |        0        |      0       |
    |      1       |     10.6.28.35    |         1         |        0        |      0       |
    |      1       |     10.6.28.27    |         1         |        0        |      0       |
    |      2       |    10.6.28.135    |         2         |        0        |      0       |
    |      1       |    10.6.28.125    |         1         |        0        |      0       |
    +--------------+-------------------+-------------------+-----------------+--------------+
    Elapsed time: 0.0104579925537 seconds.
    #

 """

import psutil
import prettytable
import time

startTime = time.time()

port = 22  # ssh -i /etc/ssh/ssh_host_rsa_key root@10.6.28.28

# define data structure for each connection, each ip is unique unit
ipaddress = {
    'ipaddress': None,
    'counts': 0,
    'stat': {
        'established': 0,
        'time_wait': 0,
        'others': 0
    }
}

# define data structure for statistics
statistics = {
    'portIsUsed': False,
    'portUsedCounts': 0,
    'portPeerList': [
        {
            'ipaddress': None,
            'counts': 0,
            'stat': {
                'established': 0,
                'time_wait': 0,
                'others': 0
            },
        },
    ]
}

tmp_portPeerList = list()
portPeerSet = set()
netstat = psutil.net_connections()

# get all ip address only for statistics data
for i, sconn in enumerate(netstat):

    if port in sconn.laddr:
        statistics['portIsUsed'] = True
        if len(sconn.raddr) != 0:
            statistics['portUsedCounts'] += 1
            ipaddress['ipaddress'] = sconn.raddr[0]
            tmp_portPeerList.append(str(ipaddress))  # dict() list() set() is unhashable type, collections.Counter

for ip in tmp_portPeerList:
    portPeerSet.add(str(ip))  # remove duplicated ip address using set()

for member in portPeerSet:
    statistics['portPeerList'].append(eval(member))

# add statistics data for each ip address
for sconn in netstat:
    if port in sconn.laddr:
        if len(sconn.raddr) != 0:
            for i, item in enumerate(statistics['portPeerList']):
                if item['ipaddress'] == sconn.raddr[0]:
                    statistics['portPeerList'][i]['counts'] += 1
                    if sconn.status == 'ESTABLISHED':
                        statistics['portPeerList'][i]['stat']['established'] += 1
                    elif sconn.status == 'TIME_WAIT':
                        statistics['portPeerList'][i]['stat']['time_wait'] += 1
                    else:
                        statistics['portPeerList'][i]['stat']['others'] += 1

# print statistics result using prettytable
if statistics['portIsUsed']:
    print "Total connections of port %s is %d." % (port, statistics['portUsedCounts'])
    table = prettytable.PrettyTable()
    table.field_names = ["Total Counts", "Remote IP Address", "Established Conns", "Time_wait Conns",
                         "Others Conns"]
    for i, ip in enumerate(statistics['portPeerList']):
        if ip['ipaddress'] is not None:
            table.add_row([ip['counts'], ip['ipaddress'], ip['stat']['established'], ip['stat']['time_wait'],
                           ip['stat']['others']])
    print table.get_string(sortby=table.field_names[1], reversesort=True)
else:
    print 'port %s has no connections, please make sure port is listen or in use.' % port

endTime = time.time()
print "Elapsed time: %s seconds." % (endTime - startTime)

tag:端口统计,python TCP连接数统计,Python统计连接数

--end--

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Python统计端口TCP连接数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Python统计端口TCP连接数

此脚本可以用来统计某个端口上连接的IP的数量,统计连接到这一端口的所有IP、最多的IP和次数以及TCP连接状态。    涉及到Python读取网络连接统计信息以及统计计算的一些基本操作。在编写脚本的过程中预先定义了统计信息的数据结构,在向最
2023-01-31

Python项目实战:使用多线程进行TCP端口扫描

前言今天为大家一个利用Python扫描开放主机的TCP端口,首先你要查看其中的开放的端口,创建一个TCP全连接扫描器,一般使用socket来创建连接器的,测试当前主机和端口是否开放,直接使用socket连接导入第三方库
2023-06-02

如何使用golang中的net.Dial函数建立TCP连接

如何使用golang中的net.Dial函数建立TCP连接在golang中,可以使用net包中的Dial函数来建立TCP连接。Dial函数提供了一个简单的接口来与远程服务器建立TCP连接,并返回一个实现了net.Conn接口的对象。在这篇文
如何使用golang中的net.Dial函数建立TCP连接
2023-11-18

python如何使用socket实现TCP协议长连接框架

这篇文章主要介绍了python如何使用socket实现TCP协议长连接框架,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。分析多了协议就会发现,很多的应用,特别是游戏类和IM类
2023-06-29

Linux系统如何使用iptables统计端口流量

这篇文章主要介绍Linux系统如何使用iptables统计端口流量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.添加ip/端口的流量统计 入网流量: iptables -A INPUT -d 0.0.0.0 -p
2023-06-28

如何在Linux中使用netstat命令查看80端口的连接数

本篇文章给大家分享的是有关如何在Linux中使用netstat命令查看80端口的连接数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。服务器上的一些统计数据:  1)统计80端口
2023-06-13

怎么在python中使用socket连接客户端

本篇文章给大家分享的是有关怎么在python中使用socket连接客户端,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python的优点有哪些1、简单易用,与C/C++、Jav
2023-06-14

如何使用netstat和awk命令来统计网络连接数

小编给大家分享一下如何使用netstat和awk命令来统计网络连接数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!netstat -n | awk /^tcp/ {++state[$NF]} END {for(key in
2023-06-04

如何使用Python Impyla客户端连接Hive和Impala

这篇文章主要介绍了如何使用Python Impyla客户端连接Hive和Impala,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用hive模块pip install sa
2023-06-02

SpringBoot如何使用AOP实现统计全局接口访问次数

本篇内容主要讲解“SpringBoot如何使用AOP实现统计全局接口访问次数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot如何使用AOP实现统计全局接口访问次数”吧!AOP是
2023-07-02

如何使用ECharts和php接口生成统计图

如何使用ECharts和PHP接口生成统计图引言:在现代web应用开发中,数据可视化是一个非常重要的环节,它能够帮助我们直观地展示和分析数据。ECharts是一款强大的开源JavaScript图表库,它提供了多种图表类型和丰富的交互功能,能
如何使用ECharts和php接口生成统计图
2023-12-18

如何使用instantclient客户端连接oracle数据库

本篇内容介绍了“如何使用instantclient客户端连接oracle数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1)首先下载i
2023-06-30

如何使用vue+node作后端连接数据库

这篇文章主要介绍了如何使用vue+node作后端连接数据库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用vue+node作后端连接数据库文章都会有所收获,下面我们一起来看看吧。1、编写node服务器先下
2023-07-05

怎么使用instantclient客户端连接oracle数据库

要使用Instant Client客户端连接Oracle数据库,您需要按照以下步骤进行操作:下载和安装Oracle Instant Client:首先,您需要从Oracle官方网站下载并安装适用于您操作系统的Oracle Instant C
怎么使用instantclient客户端连接oracle数据库
2024-03-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录