Python基于scapy实现修改IP发送请求的方法示例

 更新时间:2017年07月08日 10:43:06   作者:yueguanghaidao  
这篇文章主要介绍了Python基于scapy实现修改IP发送请求的方法,涉及Python网络编程中使用scapy操作IP的相关实现技巧,需要的朋友可以参考下

本文实例讲述了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中的Json模块dumps、dump、loads、load函数用法详解

    python中的Json模块dumps、dump、loads、load函数用法详解

    这篇文章主要介绍了python中的Json模块dumps、dump、loads、load函数用法讲解,本文逐一介绍结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-11-11
  • Python操作配置文件ini的三种方法讲解

    Python操作配置文件ini的三种方法讲解

    今天小编就为大家分享一篇关于Python操作配置文件ini的三种方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python中如何获取类属性的列表

    Python中如何获取类属性的列表

    这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Python定时任务APScheduler的实例实例详解

    Python定时任务APScheduler的实例实例详解

    APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。这篇文章主要介绍了Python定时任务APScheduler的使用,需要的朋友可以参考下
    2019-07-07
  • linux下python使用sendmail发送邮件

    linux下python使用sendmail发送邮件

    这篇文章主要为大家详细介绍了linux下python使用sendmail发送邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python 实现简单的客户端认证

    Python 实现简单的客户端认证

    这篇文章主要介绍了Python 如何实现简单的客户端认证,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 用Python 爬取猫眼电影数据分析《无名之辈》

    用Python 爬取猫眼电影数据分析《无名之辈》

    这篇文章主要介绍了用Python 爬取猫眼电影数据分析《无名之辈》,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 基于Python+QT的gui程序开发实现

    基于Python+QT的gui程序开发实现

    这篇文章主要介绍了基于Python+QT的gui程序开发实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python3.x 将byte转成字符串的方法

    python3.x 将byte转成字符串的方法

    今天小编就为大家分享一篇python3.x 将byte转成字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python matplotlib绘图建立画布及坐标系

    Python matplotlib绘图建立画布及坐标系

    这篇文章主要介绍了Python matplotlib绘图建立画布及坐标系,建立画布 figsize,它用width和height来控制画布的宽和高,下面来一起俩姐更多内容吧
    2021-12-12

最新评论