【问题标题】:How do I tell the Requests module to NOT do DNS Lookup?如何告诉请求模块不要进行 DNS 查找?
【发布时间】:2016-04-15 19:54:05
【问题描述】:

我的想法是在命令行中将 IP 地址列表提供给以下代码以检查 HTTP 方法。问题是 Python 抱怨它无法将 IP 地址解析为主机名,并出现以下错误: requests.exceptions.ConnectionError: ('Connection aborted.', gaierror(8, 'nodename nor servname provided, or not known'))

如何关闭 DNS IP --> 主机名解析?

#!/usr/bin/python
#Usage: ./name-of-this-script.py list-of-IPs
import sys
import requests
requests.packages.urllib3.disable_warnings()

## Variables

f = open(sys.argv[1], 'r')
verbs = ['GET','HEAD','POST','PUT','DELETE','OPTIONS','TRACE','PROPFIND','CONNECT','TEST', 'LOCK','MKCOL','ACL','BASELINE-CONTROL','BIND','CHECKIN','CHECKOUT','COPY','LABEL','LINK','MERGE','MKACTIVITY','MKCALENDAR','MKCOL','MKDIRECTREF','MKWORKPSACE','MOVE','ORDERPATCH','PATCH','PROPATCH','REBIND','REPORT','SEARCH','UNBIND','UNCHECKOUT','UNLINK','UPDATE','UPATEDDIRECTREF','VERSION-CONTROL','LONGPHONYHTTPMETHOD']

print "----------------------------"
print "Permitted HTTP methods indicated below by 200 OK."
print """
To control which HTTP methods are permitted on Apache 
consult: 
https://httpd.apache.org/docs/trunk/mod/mod_allowmethods.html
"""
print "----------------------------"

for line in f:
    for verb in verbs:
        print line
        #req = requests.request(verb, sys.argv[1], verify=False)
        host = 'https://'+ line
        req = requests.request(verb, host, verify=False)
        print verb, req.status_code, req.reason
        if verb == 'TRACE' and 'TRACE / HTTP/1.1' in req.text:
            print 'Possible Cross Site Tracing Vulnerability found!'

【问题讨论】:

    标签: python dns python-requests


    【解决方案1】:

    使用像 requests 这样的高级库来处理这种低级 HTTP 请求对我来说似乎有点过头了。

    我可以建议使用httplib(或http.client,如果你想使用Python 3)来代替:

    import httplib
    import ssl
    
    # Since the IP addresses will likely not match the SSL cert hostnames
    ssl_context = ssl.create_default_context()
    ssl_context.check_hostname = False
    
    ip = "104.16.34.249" # SO
    verb = "TRACE"
    
    conn = httplib.HTTPSConnection(ip, context=ssl_context)
    conn.request(verb, "/")
    r = conn.getresponse()
    print r.read(), r.status, r.reason
    

    【讨论】:

    • 谢谢,但这并不能解决我的问题,它会返回我不想要的完整 HTML 标记。
    • 有没有办法使用 requests.adapters.HTTPAdapter 禁用请求中的 gethostbyname
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2011-02-08
    • 2013-01-06
    • 2013-12-28
    相关资源
    最近更新 更多