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 相关文章推荐
Python3 入门教程 简单但比较不错
Nov 29 Python
Python脚本处理空格的方法
Aug 08 Python
Python爬豆瓣电影实例
Feb 23 Python
Python中is和==的区别详解
Nov 15 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
python实现不同数据库间数据同步功能
Feb 25 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
php对象工厂类完整示例
2018/08/09 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
在vue项目中使用sass语法问题
2019/07/18 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
Python中关于字符串对象的一些基础知识
2015/04/08 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
python中的unittest框架实例详解
2021/02/05 Python
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
行政专员岗位职责
2014/01/02 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
先进个人评语大全
2015/01/04 职场文书
李强为自己工作观后感
2015/06/11 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP