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处理圆角图片、圆形图片的例子
Apr 25 Python
Python编写屏幕截图程序方法
Feb 18 Python
Python通过select实现异步IO的方法
Jun 04 Python
python&MongoDB爬取图书馆借阅记录
Feb 05 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
python 实现A*算法的示例代码
Aug 13 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
python实现简单的名片管理系统
Apr 26 Python
分享7个 Python 实战项目练习
Mar 03 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 screw加密php源代码
2013/06/20 PHP
php中autoload的用法总结
2013/11/08 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
PHP错误处理函数
2016/04/03 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
Python可变参数函数用法实例
2015/07/07 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
C#笔试题集合
2013/06/21 面试题
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
九年级化学教学反思
2014/01/28 职场文书
企业文明单位申报材料
2014/05/16 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
golang的文件创建及读写操作
2022/04/14 Golang