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可跨平台实现获取按键的方法
Mar 05 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Django中的用户身份验证示例详解
Aug 07 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
python中有关时间日期格式转换问题
Dec 25 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
基于python实现破解滑动验证码过程解析
May 28 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
如何用Python进行时间序列分解和预测
Mar 01 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 Ajax乱码
2008/04/09 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
pandas string转dataframe的方法
2018/04/11 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python3进制之间的转换代码实例
2019/08/24 Python
为什么说python适合写爬虫
2020/06/11 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
工作决心书
2014/03/11 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
导游词之清晏园
2019/11/22 职场文书
Python jiaba库的使用详解
2021/11/23 Python