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的print用法示例
Feb 11 Python
Python版微信红包分配算法
May 04 Python
详解Python编程中基本的数学计算使用
Feb 04 Python
python爬虫入门教程--快速理解HTTP协议(一)
May 25 Python
Python的高阶函数用法实例分析
Apr 11 Python
python取余运算符知识点详解
Jun 27 Python
python实现证件照换底功能
Aug 20 Python
Python笔记之代理模式
Nov 20 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
python rsa-oaep加密的示例代码
Sep 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
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
xml转json的js代码
2012/08/28 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
深入探讨前端框架react
2015/12/09 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
Python3访问并下载网页内容的方法
2015/07/28 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python psutil库安装教程
2018/03/19 Python
python爬取指定微信公众号文章
2018/12/20 Python
详解python的四种内置数据结构
2019/03/19 Python
python使用minimax算法实现五子棋
2019/07/29 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
Python中求对数方法总结
2020/03/10 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
经营管理策划方案
2014/05/22 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers