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执行外部程序的常用方法小结
Mar 21 Python
bpython 功能强大的Python shell
Feb 16 Python
在windows系统中实现python3安装lxml
Mar 23 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
Python使用numpy实现BP神经网络
Mar 10 Python
python使用代理ip访问网站的实例
May 07 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
python装饰器相当于函数的调用方式
Dec 27 Python
python计算导数并绘图的实例
Feb 29 Python
Python命名空间及作用域原理实例解析
Aug 12 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
php发送post请求函数分享
2014/03/06 PHP
discuz目录文件资料汇总
2014/12/30 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript+xml技术实现分页浏览
2008/07/27 Javascript
javascript 写类方式之七
2009/07/05 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
使用npm安装最新版本nodejs
2018/01/18 NodeJs
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
在Python程序中操作MySQL的基本方法
2015/07/29 Python
python结合API实现即时天气信息
2016/01/19 Python
Python制作爬虫抓取美女图
2016/01/20 Python
Python中常用的内置方法
2019/01/28 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
学校社会实践活动总结
2014/07/03 职场文书
项目投资合作意向书
2014/07/29 职场文书
社区文艺活动方案
2014/08/19 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
酒桌上的开场白
2015/06/01 职场文书
Python实现天气查询软件
2021/06/07 Python