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实现xml与数据库读取转换的方法
Jun 17 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
Python错误处理操作示例
Jul 18 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
Python中文编码知识点
Feb 18 Python
详解Python并发编程之创建多线程的几种方法
Aug 23 Python
python读取mysql数据绘制条形图
Mar 25 Python
python学习笔记之多进程
Aug 06 Python
Python实现简繁体转换
Jun 07 Python
python元组打包和解包过程详解
Aug 02 Python
Python利用FlashText算法实现替换字符串
Mar 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(5) 类和对象
2010/02/16 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
javascript globalStorage类代码
2009/06/04 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
大学生个人推荐信范文
2013/11/25 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
中学自我评价
2014/01/31 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
环境保护建议书
2014/08/26 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
病房管理制度范本
2015/08/06 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python