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装饰器decorator介绍
Nov 21 Python
Python中特殊函数集锦
Jul 27 Python
Python语言描述最大连续子序列和
Dec 05 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
python word转pdf代码实例
Aug 16 Python
django实现类似触发器的功能
Nov 15 Python
python各层级目录下import方法代码实例
Jan 20 Python
使用keras2.0 将Merge层改为函数式
May 23 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/03 咖啡文化
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
Python标准库之循环器(itertools)介绍
2014/11/25 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
厨房工作人员岗位职责
2013/11/15 职场文书
我的求职计划书
2014/01/10 职场文书
个性与发展自我评价
2014/02/11 职场文书
安全责任协议书
2014/04/21 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
教师群众路线心得体会
2014/11/04 职场文书
教师工作决心书
2015/02/04 职场文书
Python中相见恨晚的技巧
2021/04/13 Python