我必须向本地服务器发出一系列请求并检查响应。基本上我试图通过暴力强迫击中正确的URL。这是我的代码:
for i in range(48,126):
test = chr(i)
urln = '012a4' + test
url = {"tk" : urln}
data = urllib.urlencode(url)
print data
request = urllib2.Request("http://127.0.0.1/brute.php", data)
response = urllib2.urlopen(request)
status_code = response.getcode()
我发出如下请求:http://127.0.0.1/brute.php?tk=some_val
我收到错误,因为网址编码不正确。我是内部服务器错误500,即使其中一个系列的url应该给200.手动给该url确认它。另外,在我获得200?
答案 0 :(得分:1)
使用urllib2
时,您应始终处理引发的任何异常,如下所示:
import urllib, urllib2
for i in range(0x012a40, 0x12a8e):
url = {"tk" : '{:x}'.format(i)}
data = urllib.urlencode(url)
print data
try:
request = urllib2.Request("http://127.0.0.1/brute.php", data)
response = urllib2.urlopen(request)
status_code = response.getcode()
except urllib2.URLError, e:
print e.reason
当连接失败时,将显示以下内容,然后继续尝试下一个连接:
[Errno 10061] No connection could be made because the target machine actively refused it
e.reason
将为您提供文字原因,e.errno
将为您提供错误代码。因此,如果错误不是10061
,那么你仍然可以停止。
最后,您似乎正在以十六进制格式骑行一系列数字?您可能会发现直接使用0x
格式化来构建字符串更容易。
答案 1 :(得分:0)
听起来你会受益于try/except
阻止:
for i in range(48,126):
test = 'chr(i)'
new urln = '012a4' + test
url = {"tk" : urln}
data = urllib.urlencode(url)
print data
request = urllib2.Request("http://127.0.0.1/brute.php", data)
try:
response = urllib2.urlopen(request)
except:
status_code = response.getcode()**strong text**
print status_code
您通常也希望捕获错误:
except Exception, e:
print e
或仅捕获特定错误,例如:
except ValueError:
#do stuff
虽然你的代码中没有ValueError
。