来自 编程应用 2019-09-04 19:47 的文章
当前位置: 六合联盟网 > 编程应用 > 正文

到页面加载呈现成功的历程,python互连网编程

今天同事想测量检验WAF的页面总结效率,所以要求效法多少个IP向八个域名发送央求,也便是内需修改源IP地址。那么些只要选取socket库就相比较麻烦了,

1. DNS解析

  • 浏览器找出本人的 DNS 缓存
  • 搜索操作系统中的 DNS 缓存
  • 寻找操作系统的 hosts 文件
  • 操作系统将域名发送至运行商查找本身的 DNS 缓存,查找成功则赶回结果,退步则提倡二个 DNS 剖析呼吁;
  • 运营商将获得的 IP 地址重回给操作系统,同期和煦也将 IP 地址缓存起来;
  • 操作系统将 IP 地址重回给浏览器,同时和谐也将 IP 地址缓存起来;

急需利用raw socket,极其劳苦。幸亏咱有scapy,轻便解决。

2. 建设构造连接,一回握手

  • 长机向服务器发送二个起家连接的呼吁( 您好,笔者想认知您 );
  • 服务器收到乞请后发送同意连接的信号( 好的,很欢愉认知您 );
  • 长机接到同意连接的时限信号后,再度向服务器发送了明确实信号( 笔者也很喜欢认知您),自此,主机与服务器两个创建了连接。

DOMAIN是本人随意构造的域名库,SOURCE也是随机构造的源IP地址。

3. 网页诉求与体现

  • 浏览器依据 U奥迪Q5L 内容生成 HTTP 央浼,央求中带有呼吁文件的岗位、必要文件的措施等等;
  • 服务器收到哀告后,会基于 HTTP 要求中的内容来支配哪些赢得相应的 HTML 文件;
  • 服务器将获得的 HTML 文件发送给浏览器;
  • 浏览器会将HTML解析成二个DOM树;
  • 在实行 HTML 中代码时,依照需求,浏览器会一连呼吁图片、CSS、JavsScript等公事,进度同诉求HTML ;
  • 将CSS解析成 CSS树 ;
  • 根据DOM树和CSS树来构造渲染树
#!/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.0rnHost: %srnUser-Agent: %srnrn'
    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!'

4. 八回挥手,断开连接

  • 长机向服务器发送多少个断开连接的伏乞( 不早了,笔者该走了 );
  • 服务器收到央浼后发送确认收到诉求的信号( 知道了 );
  • 服务器向长机发送断开布告( 笔者也该走了 );
  • 主机接到断开文告后断开连接并举报一个承认功率信号( 嗯,好的 ),服务器收到确认实信号后断开连接;

但那将招致三个难题,由于大家域名是随机构造的,发送央求鲜明首先查找DNS,很恐怕剖析战败。这里有八个法子消除这几个难题:

5. 互补表达

  • DNS: 每种域名都对应贰个或七个提供平等服务服务器的 IP 地址,独有知道服务器 IP 地址才具创立连接,所以要求通过 DNS 把域名深入分析成二个 IP 地址;
  • IP 地址与域名不是种种对应的涉及:能够把七个提供同样服务的服务器 IP 设置为同三个域名,但在同等时刻贰个域名只可以剖判出二个IP地址;同期,三个 IP 地址能够绑定多个域名,数量不限;
  • TCP 协商:一遍握手的进度选拔 TCP 协议,其得以确认保障音讯传输的可相信性,三次握手进程中,若一方收不到确认时限信号,左券会供给重新发送时域信号。

1.将享有域名增添到hosts当半夏件中,IP可以为服务器地址

2. 出于hosts文件不援救通配符表示,所以能够应用DNS代理,或许自身写小工具,想怎么分析就怎么分析,这里有贰个,

...

本文由六合联盟网发布于编程应用,转载请注明出处:到页面加载呈现成功的历程,python互连网编程

关键词: