Python基于scapy实现修改IP发送请求的方法示例


Posted in Python onJuly 08, 2017

本文实例讲述了Python基于scapy实现修改IP发送请求的方法。分享给大家供大家参考,具体如下:

今天同事想测试WAF的页面统计功能,所以需要模拟多个IP向多个域名发送请求,也就是需要修改源IP地址。这个如果使用socket库就比较麻烦了,

需要使用raw socket,相当麻烦。还好咱有scapy,轻松搞定。

DOMAIN是我随机构造的域名库,SOURCE也是随机构造的源IP地址。

#!/usr/bin/env python
#-*-encoding:UTF-8-*-
from scapy.all import *
from threading import Thread
from Queue import Queue
import random
import string
USER_AGENTS = ( # items used for picking random HTTP User-Agent header value
  "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_0; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.678.0 Safari/534.21",
  "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
  "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.2) Gecko/20020508 Netscape6/6.1",
  "Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5",
  "Opera/9.80 (X11; U; Linux i686; en-US; rv:1.9.2.3) Presto/2.2.15 Version/10.10"
)
TOP_DOMAIN = ('com','org','net','gov','edu','mil','info','name','biz')
DOMAIN = ["www.%s.%s" %(
    '.'.join(''.join(random.sample(string.ascii_lowercase, random.randint(2,6))) for x in range(random.randint(1,2))),
    random.choice(TOP_DOMAIN))
    for _ in range(100)
]
SOURCE = ['.'.join((str(random.randint(1,254)) for _ in range(4))) for _ in range(100)]
class Scan(Thread):
  HTTPSTR = 'GET / HTTP/1.0\r\nHost: %s\r\nUser-Agent: %s\r\n\r\n'
  def run(self):
    for _ in xrange(100):
      domain = random.choice(DOMAIN)
      http = self.HTTPSTR % (domain,random.choice(USER_AGENTS))
      try:
        request = IP(src=random.choice(SOURCE),dst=domain) / TCP(dport=80) / http
        #request = IP(dst=domain) / TCP(dport=80) / http
        send(request)
      except:
        pass
task = []
for x in range(10):
  t = Scan()
  task.append(t)
for t in task:
  t.start()
for t in task:
  t.join()
print 'all task done!'

但这将导致一个问题,由于我们域名是随机构造的,发送请求肯定首先查找DNS,很可能解析失败。这里有两个方法解决这个问题:

1.将所有域名添加到hosts本地文件中,IP可以为服务器地址

2. 由于hosts文件不支持通配符表示,所以可以使用DNS代理,或者自己写小工具,想怎么解析就怎么解析,这里有一个https://github.com/phuslu/dnsproxy/blob/master/dnsproxy.py

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python下载图片实现方法(超简单)
Jul 21 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Python及PyCharm下载与安装教程
Nov 18 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python实现网页自动签到功能
Jan 21 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 #Python
python 中random模块的常用方法总结
Jul 08 #Python
Python调用微信公众平台接口操作示例
Jul 08 #Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 #Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 #Python
浅谈Python中的可变对象和不可变对象
Jul 07 #Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 #Python
You might like
PHP安装全攻略:APACHE
2006/10/09 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
vue实现放大镜效果
2020/09/17 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
解读! Python在人工智能中的作用
2017/11/14 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python3将变量输入的简单实例
2020/08/19 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
妈妈的账单教学反思
2014/02/06 职场文书
网络编辑岗位职责
2014/03/18 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
个人自我剖析材料
2014/09/30 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
使用pytorch实现线性回归
2021/04/11 Python
如何用threejs实现实时多边形折射
2021/05/07 Javascript
Python破解极验滑动验证码详细步骤
2021/05/21 Python
详解JAVA的控制语句
2021/11/11 Java/Android