我正在创建一个脚本,将来自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的低性能相关推荐

  1. python那么慢为什么还有人用-Python执行效率慢,为什么还这么火?【黑马程序员】...

    稍微了解python的同学,都知道python比起java这类编译型语言来说执行效率比较低,可是为什么python依然这么火呢? Python是一门解释型的动态语言,由于语言的解释执行的过程和动态类型 ...

  2. 提高python执行效率_关于提高python程序执行效率的思路和想法

    原博文 2016-06-09 22:25 − 相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势--执行效率较低,为了让编写出 ...

  3. 提高python执行效率_提升Python程序运行效率的6个方法

    Python是一个很酷的语言,因为你可以在很短的时间内利用很少的代码做很多事情.不仅如此,它还能轻松地支持多任务,比如多进程等.Python批评者有时会说Python执行缓慢.本文将尝试介绍6个技巧, ...

  4. python执行linux命令返回结果_python执行linux命令的简单示例

    对python执行linux命令的两种方法感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: ...

  5. python执行shell命令查看输出_python 运行 shell 命令并捕获输出_python_酷徒编程知识库...

    这个问题的答案取决于你使用的python 版本. 最简单的方法是使用 subprocess.check_output 函数:>>> subprocess.check_output([ ...

  6. python执行结果在gui界面显示_Python PyQt5运行程序把输出信息展示到GUI图形界面上...

    概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用PyQt5写了图形界面,为了将所有的输出信息都显示到图形界面上遇到了问题. 先演示一下效果最终效果吧,下面两张图用来镇楼.可以看到我们图形界面和程序运 ...

  7. python执行循环内存变大_python – 为什么我的循环在每次迭代时需要更多内存?...

    虽然脚本确实使用了相当多的内存,即使使用"较小"的示例值,答案也是如此 Does Python clone my entire environment each time the ...

  8. python执行原理是什么意思_Python程序的执行原理

    摘要:Python程序的执行原理是什么,下面这篇文章为你详细介绍. 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执 ...

  9. python执行linux命令返回结果_Python中调用Linux命令并获取返回值

    方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于she ...

最新文章

  1. 阿里云Redis多线程性能提升思路解析
  2. 在Linux中设置UMASK值
  3. 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计
  4. rxlifecycle 框架的使用
  5. dsh批量管理linux服务器
  6. python开发环境的搭建和设置
  7. vuex状态持久化_Vuex持久化存储之vuex-persist
  8. Nginx之代理和负载均衡
  9. Oracle基本函数即字段拆分
  10. 阿里 P6 和 P7 的主要区别是什么?
  11. node.js 爬取腾讯地图API全国行政区数据
  12. JMP系列-基础操作(一)
  13. 【雅思大作文考官范文】——第十四篇:festivals essay
  14. jupyter 使用nginx进行代理的nginx配置文件
  15. Android 如何在关于手机界面添加个图片
  16. 小米路由pro php,家庭实测 | 荣耀路由Pro2 可以吊打小米路由器吗?
  17. 单片机驱动蜂鸣器(有源和无源)
  18. 数据结构初阶:二叉树
  19. Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结
  20. Python离线安装包教程

热门文章

  1. 我理解的invoke和begininvoke
  2. maven 关于使用 snapshot 的坑
  3. java List集合转换为List Map集合
  4. Android vector矢量图应用实例
  5. Java多线程,锁(synchronize),饿汉式单例线程,等待处理机制
  6. 优化JS代码的34种方法(上)
  7. (五)官方Neo4j 3.3.9 Java API例子
  8. x86从实模式到保护模式实验说明
  9. leetcode 121
  10. 文档服务器设置密码,文档服务器设置密码