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实现的Kmeans++算法实例
Apr 26 Python
开始着手第一个Django项目
Jul 15 Python
Python中属性和描述符的正确使用
Aug 23 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
python 杀死自身进程的实现方法
Jul 01 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
pycharm代码删除恢复的方法
Jun 26 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脚本数据库功能详解(中)
2006/10/09 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
php给数组赋值的实例方法
2019/09/26 PHP
php源码的使用方法讲解
2019/09/26 PHP
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
vue实现登录功能
2020/12/31 Vue.js
用Python创建声明性迷你语言的教程
2015/04/13 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
Python socket服务常用操作代码实例
2020/06/22 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
技术学校毕业生求职信分享
2013/12/02 职场文书
工地门卫岗位职责
2013/12/30 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
服务标兵事迹材料
2014/05/04 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
暑假学习心得体会
2014/09/02 职场文书
公司租车协议书
2015/01/29 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang