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多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
简单实现python聊天程序
Apr 01 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
python实现字符串加密成纯数字
Mar 19 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
python中with用法讲解
Feb 07 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
通过Python把学姐照片做成拼图游戏
Feb 15 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
source.php查看源文件
2006/12/09 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
vue-router单页面路由
2017/06/17 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
spyder常用快捷键(分享)
2017/07/19 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
python实现PCA降维的示例详解
2020/02/24 Python
Python 列表反转显示的四种方法
2020/11/16 Python
linux面试题参考答案(6)
2014/08/29 面试题
办公室内勤工作职责
2013/12/11 职场文书
后勤采购员岗位职责
2013/12/19 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
工作检讨书大全
2015/01/26 职场文书
法制工作总结2015
2015/07/23 职场文书
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android