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 查找文件夹下所有文件 实现代码
Jul 01 Python
Python基于PycURL实现POST的方法
Jul 25 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
DES加密解密算法之python实现版(图文并茂)
Dec 06 Python
如何使用python操作vmware
Jul 27 Python
Python tcp传输代码实例解析
Mar 18 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
python里反向传播算法详解
Nov 22 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
python3 字符串str和bytes相互转换
Mar 23 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
S900/ ETON E1-XM 收音机
2021/03/02 无线电
深入PHP curl参数的详解
2013/06/17 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
php 可变函数使用小结
2018/06/12 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
python opencv3实现人脸识别(windows)
2018/05/25 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python时间time模块处理大全
2020/10/25 Python
学校三八妇女节活动情况总结
2014/03/09 职场文书
继承公证书样本
2014/04/04 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
技术负责人岗位职责
2015/02/10 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
MYSQL常用函数介绍
2022/05/05 MySQL