python执行效率有多低_python – Scapy的低性能
我正在创建一个脚本,将来自Tap0的所有流量发送到Eth0,并将来自Eth0的所有流量发送到Tap0.在网上找到很多例子后,我设法让它发挥作用.我遇到的问题是性能非常低.
在不使用脚本的情况下在2个VM之间进行ping操作,所需时间不到1毫秒.使用脚本需要大约15ms.
当我使用scp从VM向另一个VM发送10 MB文件时,平均值.没有脚本,传输速率是12 Mbps.使用该脚本,它降至不到1 Mbps.
我知道Python实际上并不是处理网络流量最快的语言,但它是否会变慢?
有没有办法优化这段代码?
我的VM是Ubuntu 10.04 32位.
这是代码:
import os,sys,getopt,struct,re,string,logging
from socket import *
from fcntl import ioctl
from select import select
from scapy.all import *
TUNSETIFF = 0x400454ca
IFF_TAP = 0x0002
TUNMODE = IFF_TAP
ETH_IFACE = "eth0"
TAP_IFACE = "tap0"
conf.iface = ETH_IFACE
# Here we capture frames on ETH0
s = conf.L2listen(iface = ETH_IFACE)
# Open /dev/net/tun in TAP (ether) mode (create TAP0)
f = os.open("/dev/net/tun", os.O_RDWR)
ifs = ioctl(f, TUNSETIFF, struct.pack("16sH", "tap%d", TUNMODE))
# Speed optimization so Scapy does not have to parse payloads
Ether.payload_guess=[]
os.system("ifconfig eth0 0.0.0.0")
os.system("ifconfig tap0 192.168.40.107")
os.system("ifconfig tap0 down")
os.system("ifconfig tap0 hw ether 00:0c:29:7a:52:c4")
os.system("ifconfig tap0 up")
eth_hwaddr = get_if_hwaddr('eth0')
while 1:
r = select([f,s],[],[])[0] #Monitor f(TAP0) and s(ETH0) at the same time to see if a frame came in.
#Frames from TAP0
if f in r: #If TAP0 received a frame
# tuntap frame max. size is 1522 (ethernet, see RFC3580) + 4
tap_frame = os.read(f,1526)
tap_rcvd_frame = Ether(tap_frame[4:])
sendp(tap_rcvd_frame,verbose=0) #Send frame to ETH0
#Frames from ETH0
if s in r: #If ETH0 received a frame
eth_frame = s.recv(1522)
if eth_frame.src != eth_hwaddr:
# Add Tun/Tap header to frame, convert to string and send. "\x00\x00\x00\x00" is a requirement when writing to tap interfaces. It is an identifier for the Kernel.
eth_sent_frame = "\x00\x00\x00\x00" + str(eth_frame)
os.write(f, eth_sent_frame) #Send frame to TAP0
python执行效率有多低_python – Scapy的低性能相关推荐
- python那么慢为什么还有人用-Python执行效率慢,为什么还这么火?【黑马程序员】...
稍微了解python的同学,都知道python比起java这类编译型语言来说执行效率比较低,可是为什么python依然这么火呢? Python是一门解释型的动态语言,由于语言的解释执行的过程和动态类型 ...
- 提高python执行效率_关于提高python程序执行效率的思路和想法
原博文 2016-06-09 22:25 − 相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势--执行效率较低,为了让编写出 ...
- 提高python执行效率_提升Python程序运行效率的6个方法
Python是一个很酷的语言,因为你可以在很短的时间内利用很少的代码做很多事情.不仅如此,它还能轻松地支持多任务,比如多进程等.Python批评者有时会说Python执行缓慢.本文将尝试介绍6个技巧, ...
- python执行linux命令返回结果_python执行linux命令的简单示例
对python执行linux命令的两种方法感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: ...
- python执行shell命令查看输出_python 运行 shell 命令并捕获输出_python_酷徒编程知识库...
这个问题的答案取决于你使用的python 版本. 最简单的方法是使用 subprocess.check_output 函数:>>> subprocess.check_output([ ...
- python执行结果在gui界面显示_Python PyQt5运行程序把输出信息展示到GUI图形界面上...
概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用PyQt5写了图形界面,为了将所有的输出信息都显示到图形界面上遇到了问题. 先演示一下效果最终效果吧,下面两张图用来镇楼.可以看到我们图形界面和程序运 ...
- python执行循环内存变大_python – 为什么我的循环在每次迭代时需要更多内存?...
虽然脚本确实使用了相当多的内存,即使使用"较小"的示例值,答案也是如此 Does Python clone my entire environment each time the ...
- python执行原理是什么意思_Python程序的执行原理
摘要:Python程序的执行原理是什么,下面这篇文章为你详细介绍. 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执 ...
- python执行linux命令返回结果_Python中调用Linux命令并获取返回值
方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于she ...
最新文章
- 阿里云Redis多线程性能提升思路解析
- 在Linux中设置UMASK值
- 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计
- rxlifecycle 框架的使用
- dsh批量管理linux服务器
- python开发环境的搭建和设置
- vuex状态持久化_Vuex持久化存储之vuex-persist
- Nginx之代理和负载均衡
- Oracle基本函数即字段拆分
- 阿里 P6 和 P7 的主要区别是什么?
- node.js 爬取腾讯地图API全国行政区数据
- JMP系列-基础操作(一)
- 【雅思大作文考官范文】——第十四篇:festivals essay
- jupyter 使用nginx进行代理的nginx配置文件
- Android 如何在关于手机界面添加个图片
- 小米路由pro php,家庭实测 | 荣耀路由Pro2 可以吊打小米路由器吗?
- 单片机驱动蜂鸣器(有源和无源)
- 数据结构初阶:二叉树
- Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结
- Python离线安装包教程