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中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
flask中过滤器的使用详解
Aug 01 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Python for循环与range函数的使用详解
Mar 23 Python
python爬虫-模拟微博登录功能
Sep 12 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
python使用bs4爬取boss直聘静态页面
Oct 10 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
PHP系统流量分析的程序
2006/10/09 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
初始Nodejs
2014/11/08 NodeJs
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
原生js实现验证码功能
2017/03/16 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
Python异常处理操作实例详解
2018/08/28 Python
Python基本socket通信控制操作示例
2019/01/30 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
火山动力Java笔试题
2014/06/26 面试题
4s店机修工岗位职责
2013/12/20 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
国际会计专业求职信
2014/08/04 职场文书
2015年电工工作总结
2015/04/10 职场文书
信用卡工资证明范本
2015/06/19 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
化验室安全管理制度
2015/08/06 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android