python 怎么获取一个端口或者一个进程的网络流量

import socket
import struct
import thread
import threading
import time
import os

net_data = {}
d_net_info = {}
lock = threading.Lock()

def print_data():
while True:
lock.acquire()
for key in net_data:
print "%s %s\n"%(key, net_data[key])
lock.release()
time.sleep(5);

def get_net_info():
net_info = os.popen('netstat -nbo').readlines()

for l in net_info[4:]:
s = l.split()
if len(s)>2:
key = "%s %s"%(s[1],s[2])
key2 = "%s %s"%(s[2],s[1])
else:
if not d_net_info.has_key(key):
d_net_info[key] = s[0]
d_net_info[key2] = s[0]

def get_packet():
HOST = socket.gethostbyname(socket.gethostname())
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
net_data["unknow"] = 0

while True:
buf = s.recvfrom(65565)
port = struct.unpack('HH', buf[0][20:24])

src_ip = "%d.%d.%d.%d"%struct.unpack('BBBB', buf[0][12:16])
dest_ip ="%d.%d.%d.%d"%struct.unpack('BBBB', buf[0][16:20])
src_port = socket.htons(port[0])
dest_port = socket.htons(port[1])

data_len = len(buf[0])
key="%s:%d %s:%d"%(src_ip,src_port,dest_ip,dest_port)
if not d_net_info.has_key(key):
get_net_info()

if d_net_info.has_key(key):
key2 ="%s %s"%(key,d_net_info[key])
if net_data.has_key(key2):
net_data[key2] =net_data[key2]+data_len
else:
net_data[key2] = data_len
else:
net_data["unknow"] =net_data["unknow"] + data_len

thread.start_new_thread(print_data,())
get_packet()
os.exit()

❷ 如何在python3中获取默认网卡名

直接用global修饰符指主程序的变量名,就可以使用它。不过python的变量都是对象,对象操作也不是原子操作。所以如果有有冲突,需要加锁,通过锁来控制多线程读写。
python就是一个解释执行器,一个进程里所有的东西都是放在一个内存空间的。只要设定好范围,所有的东西,不管是变量,函数,还是程序都是可以访问的。

❸ python怎样获取本机所有网卡的ipv4地址

def get_local_ipaddr():
results = []
for i in netifaces.interfaces():
info = netifaces.ifaddresses(i)
if netifaces.AF_INET not in info:
continue
results.append(info[netifaces.AF_INET][0]['addr'])
return results

if __name__ == '__main__':
print(get_local_ipaddr())

❹ 如何使用python来替换相对应的网卡信息

import os      lineList = []   postfixes = ['.py', '.java', '.c', '.cpp', '.h']      def deal_lines(file_name):       cmd = "dos贰 -ascii %s" %file_name       os.system(cmd)       with open(file_name, 'r') as f:           for line in f:               str = line.replace('\t', '    ').rstrip()               yield str + "\n"      def format_covert(file_path):       for path, dirs, files in os.walk(file_path):           for name in files:               full_path = os.path.join(path, name)               norm_path = os.path.normpath(os.path.abspath(full_path))               modifyFileFlag = any([norm_path.endswith(postfix) for postfix in postfixes])               if modifyFileFlag:                   for line in deal_lines(norm_path):                       lineList.append(line)                   with open(norm_path, 'w+') as f:                       for index in range(0, len(lineList)):                           f.write(lineList[index])                   del lineList[:]      if __name__ == '__main__':       file_path = raw_input('Please input a file path: ')       format_covert(file_path

❺ python 打开网卡配置,删除NETMASK和IPADDR这行内容,注意NETMASK和IPADDR所在的行不知道。求教高手。

defmodifyip(ipfile):
try:
lines=open(ipfile,'r').readlines()
foriinlines:
if'IPADDR'inior'NETMASK'ini:
lines.remove(i)
open(ipfile,'w').writelines(lines)

exceptException,e:
printe

modifyip('ip.txt')

❻ 在linux下,python怎么才能抓到网卡上的所有TCP数据包

Ethereal 自带许多协议的 decoder,简单,易用,基于winpcap的一个开源的软件.但是它的架构并不灵活,如何你要加入一个自己定义的的解码器,得去修改 Ethereal的代码,再重新编译,很烦琐.对于一般的明文 协议,没有什么问题,但是对于加密协议,比如网络游戏,客户端程序一般会在刚连接上的时候,发送一个随机密钥,而后的报文都会用这个密钥进行加密,如此. 要想破解,得要有一个可编程的抓包器.
libpcap是一个不错的选择,但是对于抓包这样需要反复进行”试 验->修改”这个过程的操作,c 语言显然不是明智的选择.
Python提供了几个libpcapbind。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用
一个规范的抓包过程
import pcap
import dpkt
pc=pcap.pcap() #注,参数可为网卡名,如eth0
pc.setfilter('tcp port 80') #设置监听过滤器
for ptime,pdata in pc: #ptime为收到时间,pdata为收到数据
print ptime,pdata #...
对抓到的以太网V2数据包(raw packet)进行解包
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
if p.data.data.__class__.__name__=='TCP':
if data.dport==80:
print p.data.data.data # by gashero
一些显示参数
nrecv,ndrop,nifdrop=pc.stats()
返回的元组中,第一个参数为接收到的数据包,(by gashero)第二个参数为被核心丢弃的数据包。

❼ 已经获取虚拟机的所有信息,怎么用python提取网卡信息

KVM(Kernel-based Virtual Machine)作为一个开源的系统虚拟化模块,已经成为虚拟机虚拟化技术的主流,在越来越多的Cloud环境中使用。为了保证Cloud环境的正常运行,需要在运维过程中对Cloud环境中的VM状态进行监控,比如CPU,内存,Disk,Disk I/O,Network I/O等信息,可以利用这些信息及时的调整分配Cloud环境的资源,保证VM的正常运行。Libvirt是基于KVM的上层封装,提供了操作KVM的原生层接口,可以实现对虚拟机的日常管理操作,如虚拟机的生命周期(创建,删除,查看,管理),开机,关机,重启,网络管理,存储管理等。本文以查看hypervisor的instance为例,讲述通过Libvirt-python模块,查看当前HOST的KVM虚拟机常用监控信息。文章主要包括如下几个方面的内容:
1、 Libvirt-python模块的简单介绍与环境安装配置;
2、 利用Python调用API获取 VM相关监控信息;
1. Libvirt-python模块的简单介绍与安装配置
Libvirt提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的客户操作系统,是一种可以建立工具来管理客户操作系统的 API。Libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API,适用于包括基于KVM/QEMU, Xen, LXC, OpenVZ, Virtualbox, VMware, PowerVM等多种虚拟机化技术的虚拟机。Libvirt-python是基于libvirt API的python语言绑定工具包,通过该包,可以使用python对VM进行日常管理操作和监控数据获取。需要运行的Python监控程序可以在KVM的HOST中运行,也可以在基于KVM虚拟机化的任意环境运行,需要做的配置如下:
1) 环境准备:
安装python 2.6及以上
安装libvirt 1.2及以上
安装libvirt-client 1.2及以上
安装libvirt-python1.2及以上
以上环境如果已经在操作系统中存在并且满足要求,不需要进行重复安装,可以在libvirt的官方网站选择不同的站点和适合自己操作系统的安装包进行下载安装。

2) 验证安装环境:

安装完上述安装包后,在命令行运行rpm -qa | grep libvirt 查看相关安装信息是否正确如图:

在命令行运行python命令查看python环境

在命令行运行virsh进入virsh命令行窗口

执行list –all,列出所有虚拟机,执行dommemstat domainID验证windows虚拟机内存信息

unused代表虚机内部未使用的内存量,available代表虚机内部识别出的总内存量,那么虚机内部的内存使用量则是(available-unused)。
如果windows虚拟机中没有unused值,

按下一步安装virtio-win驱动和balloon service,并且启动balloon service
3) windows虚拟机Windows Virtio Drivers安装。
1、下载地址,根据自己需求下载相应版本,这里以下载Stable virtio-win iso为例。
2、安装驱动
3、安装Balloon Services,
在python应用运行环境验证servie,查看该VM 内存信息。

2. 利用Python调用API获取 VM相关监控信息
2.1创建连接
Python的管理应用程序可以和域位于同一节点上,管理应用程序通过libvirt工作,以控制本地域,如下图:

也可以运行在远端,通过本地libvirt连接远端libvirt,以控制本地域,该模式使用一种运行于远程节点上的libvirtd守护进程。当在新节点上安装libvirt时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd。

提供不同的连接方式,注意连接使用过后需要关闭。
from __future__ import print_function
import sys
import libvirt
# conn = libvirt.open('qemu+ssh://IP/system'
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
conn.close()
2.2 列出Domains
conn.listAllDomains(type)方法返回指定类型的domains列表,type参数可以设置以下类型
VIR_CONNECT_LIST_DOMAINS_ACTIVE
VIR_CONNECT_LIST_DOMAINS_INACTIVE
VIR_CONNECT_LIST_DOMAINS_PERSISTENT
VIR_CONNECT_LIST_DOMAINS_TRANSIENT
VIR_CONNECT_LIST_DOMAINS_RUNNING
VIR_CONNECT_LIST_DOMAINS_PAUSED
VIR_CONNECT_LIST_DOMAINS_SHUTOFF
VIR_CONNECT_LIST_DOMAINS_OTHER
VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE
VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE
VIR_CONNECT_LIST_DOMAINS_AUTOSTART
VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART
VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT
VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHO
如果设置为0,则返回所有活动和关机的domain
2.2 获取监控数据
VM的监控信息主要是CPU使用率,内存使用率,Disk使用率,Disk I/O,Network I/O。其中,CPU的使用率,Disk I/O,Network I/O并不能直接获取,需要经过计算获得。
2.2.1 CPU使用率
libvirt中并不能直接获取到虚拟机的CPU使用率,但是可以通过CPUTIME来计算出实际使用率。计算的公式为:
首先得到一个周期差:cpu_time_diff = cpuTimenow — cpuTimet seconds ago
然后根据这个差值计算实际使用率:%CPU = 100 × cpu_time_diff / ((now- seconds ago) × vcpus × 109).CPUtime可以使用domain的info函数获得,如下:
from __future__ import print_function
import sys
import libvirt
from xml.dom import minidom
conn = libvirt.open('qemu:///system')
dom = conn.lookupByName(domName)
dominfo = dom.info()
print('The state is ' + str(dominfo[0]))
print('The max memory is ' + str(dominfo[1]))
print('The memory is ' + str(dominfo[2]))
print('The number of cpus is ' + str(dominfo[3]))
print('The cpu time is ' + str(dominfo[4]))
conn.close()
info()函数返回一个数组,下标为4的值即为CPUTime。
2.2.2 内存使用率
内存的使用情况可以函数dom.memoryStats()获得,如下:
from __future__ import print_function
import sys
import libvirt
domName = 'Fedora22-x86_64-1'
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
dom = conn.lookupByID(5)
if dom == None:
print('Failed to find the domain '+domName, file=sys.stderr)
exit(1)
stats = dom.memoryStats()
print('memory used:')
for name in stats:
print(' '+str(stats[name])+' ('+name+')')
conn.close()
exit(0)
可以在Virsh命令行中验证获取的值是否正确。
2.2.3 Disk使用率
对于一个VM的DISK,在DOMAIN XML的device根据标示获取,有关Disk部分的XML如下所示。
<devices>
<disk type='file' snapshot='external'>
<driver name="tap" type="aio" cache="default"/>
<source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
<seclabel relabel='no'/>
</source>
<target dev='hda' bus='ide'/>
/*这个'hda'就是需要的参数 */
<iotune>
<total_bytes_sec>10000000</total_bytes_sec>
<read_iops_sec>400000</read_iops_sec>
<write_iops_sec>100000</write_iops_sec>
</iotune>
<boot order='2'/>
<encryption type='...'>
...
</encryption>
<shareable/>
<serial>
...
</serial>
</disk>
...
</devices>
使用函数domain.blockInfo(disk,0)获得磁盘的总量和已使用量
2.2.4 Disk I/O
可以使用 domain. blockStats ()方法,该方法需要传递一个Disk的参数,这个参数可以通过XML文件取得:
<devices>
<disk type='file' snapshot='external'>
<driver name="tap" type="aio" cache="default"/>
<source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
<seclabel relabel='no'/>
</source>
<target dev='hda' bus='ide'/>
/*这个'hda'就是需要的参数 */
<iotune>
<total_bytes_sec>10000000</total_bytes_sec>
<read_iops_sec>400000</read_iops_sec>
<write_iops_sec>100000</write_iops_sec>
</iotune>
<boot order='2'/>
<encryption type='...'>
...
</encryption>
<shareable/>
<serial>
...
</serial>
</disk>
...
</devices>
2.2.5 Network I/O
可以使用 domain.interfaceStats()方法,该方法需要传递一个虚拟网卡接口的参数,这个参数可以通过XML文件取得:
<interface type='bridge'>
<mac address='00:16:3e:74:03:53'/>
<source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0 '/>
/*这个vif1.0就是需要的参数 */
</interface>
网卡的I/O值返回是一个数组,根据自己需要获取对应的值。
3. 总结
通过对VM监控信息的获取,可以实时的了解Cloud环境中各个VM的负载和使用情况,合理的调配计算资源,或者关闭长时间没有使用的VM,做到Cloud资源的合理利用和运行环境的健康可靠性。

❽ 用Python怎么读取Windows系统的网卡带宽

etUsage = Bytes Total / Current Bandwidth,
一般带宽都是小b(位每秒),所以应该结果也是小b。
every network interface installed on the system
如果你的每个网卡都只有一个网口,内你可以简单容将网口理解为网卡。

❾ python psutil 获取的带宽是哪个网卡的

help="此参数可查看当前下载占的带宽,-t是测试时间", metavar="10")
parser.add_option("-d", "--deamon",action="store_false", dest="deamon", default=True,
help="后台回运行答此脚本")

❿ python pywifi 模块 如何识别(获取外置网卡)多张网卡(python的其他模块也可以)

不知道你是windows还是linux系统,用系统的网络配置命令查看,然后从结果里正则提取即可。
例如windows的 ipconfig /all 里面就有你要的信息。netsh命令下面也能找到你要的更多参数。