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写入CSV文件的方法
Jul 08 Python
Python中set与frozenset方法和区别详解
May 23 Python
Python heapq使用详解及实例代码
Jan 25 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
python使用pycharm环境调用opencv库
Feb 11 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
python write无法写入文件的解决方法
Jan 23 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
详解Python描述符的工作原理
Jun 11 Python
Python字符串常规操作小结
Apr 03 Python
在python中读取和写入CSV文件详情
Jun 28 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
收音机指标测试方法及仪器
2021/03/01 无线电
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
python读取Android permission文件
2013/11/01 Python
python33 urllib2使用方法细节讲解
2013/12/03 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Django Celery异步任务队列的实现
2019/07/24 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
会计岗位职责
2015/02/03 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
总账会计岗位职责
2015/04/02 职场文书
戒赌保证书
2015/05/11 职场文书
集结号观后感
2015/06/08 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL