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的Django框架的运行方式及处理流程
Apr 08 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
python dataframe 输出结果整行显示的方法
Jun 14 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
Python检测数据类型的方法总结
May 20 Python
python3的print()函数的用法图文讲解
Jul 16 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
Python 实现自动导入缺失的库
Oct 29 Python
Python求正态分布曲线下面积实例
Nov 20 Python
使用django自带的user做外键的方法
Nov 30 Python
Python趣味挑战之教你用pygame画进度条
May 31 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 版本]
2007/03/20 PHP
php 上传功能实例代码
2010/04/13 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
js实现的切换面板实例代码
2013/06/17 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
原生js实现轮播图
2017/02/27 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python实现高效求解素数代码实例
2015/06/30 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
一套SQL笔试题
2016/08/14 面试题
进修护士自我鉴定
2013/10/14 职场文书
放假通知格式
2015/04/14 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
实用求职信模板范文
2019/05/13 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers