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 相关文章推荐
简介Django框架中可使用的各类缓存
Jul 23 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
python调用fortran模块
Apr 08 Python
python爬虫使用cookie登录详解
Dec 27 Python
Python对多属性的重复数据去重实例
Apr 18 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
Python读取二进制文件代码方法解析
Jun 22 Python
如何在mac版pycharm选择python版本
Jul 21 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
方法汇总:Python 安装第三方库常用
Apr 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
onpropertypchange
2006/07/01 Javascript
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
用Python开发app后端有优势吗
2020/06/29 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
法学专业个人求职信
2013/09/26 职场文书
员工薪酬福利制度
2014/01/17 职场文书
文化活动实施方案
2014/03/28 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
无保留意见审计报告
2015/06/05 职场文书
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技