1.python知识
随便过一遍python前置知识
import requests
# url="https://cn.bing.com/search?q=baidu1&form=ANSPH1&refig=6735b4ceb83048cd9c774ca99db2a002&pc=U531"
# try: #1.get访问的时候要有http头
# print(requests.get(url).status_code) #5.返回状态码 .status_code
# print(requests.get("https://cn.bing.com/search?q=baidu1&form=ANSPH1&refig=6735b4ceb83048cd9c774ca99db2a002&pc=U531"))
# #4.会输出状态码,说明网站正常访问
# requests.get("https://yanxiao.comkjhgfd") #2.访问不到网址就报错,停止程序
# except:
# pass #3.访问不到就过
#
# for i in range(1,100):
# print(i)
#正式开始写代码
#比如大家在一个网段:192.168.6.X X为0-255 #6. .format代表前面的变量
url="http://192.168.6.129:"
for i in range(1,11):
url_new=url+"{}".format(i)
print(url_new)
'''
http://192.168.6.129:1
http://192.168.6.129:2
http://192.168.6.129:3
http://192.168.6.129:4
http://192.168.6.129:5
http://192.168.6.129:6
http://192.168.6.129:7
http://192.168.6.129:8
http://192.168.6.129:9
http://192.168.6.129:10
'''
2.脚本扫描存活主机(get)
import requests
from concurrent.futures import ThreadPoolExecutor
import re
f = open("host.txt", "w")
def get_ip(url):
resp = requests.get(url)
status = resp.status_code
if status == 200:
f.write(url + "\n")
print(url)
url = []
for i in range(1, 255):
url.append("http://192-168-1-" + str(i) + ".pvp5422.bugku.cn") #拼接网段的字符串
with ThreadPoolExecutor(max_workers=100) as executor:
executor.map(get_ip, url)
"""
http://192-168-1-93.pvp5422.bugku.cn
http://192-168-1-173.pvp5422.bugku.cn
"""
导入模块
import requests
from concurrent.futures import ThreadPoolExecutor
import re
requests
: 用于发送HTTP请求。ThreadPoolExecutor
: 用于并发执行任务,这里用来同时处理多个HTTP请求,提高效率。re
: 正则表达式模块,在这个脚本中没有用到。
文件操作
f = open("host.txt", "w")
- 打开或创建名为
host.txt
的文件,准备写入数据。
定义函数
def get_ip(url):
resp = requests.get(url)
status = resp.status_code
if status == 200:
f.write(url + "\n")
print(url)
get_ip(url)
: 这个函数接受一个URL作为参数,使用requests.get()
方法向该URL发送GET请求。resp = requests.get(url)
: 发送请求并获取响应对象。status = resp.status_code
: 获取HTTP响应的状态码。- 如果状态码为200(表示请求成功),则将URL写入
host.txt
文件,并打印该URL。
构建URL列表
url = []
for i in range(1, 255):
url.append("http://192-168-1-" + str(i) + ".pvp5422.bugku.cn") #拼接网段的字符串
- 创建一个空列表
url
。 - 使用
for
循环遍历1到254之间的数字,构建每个可能的IP地址,并将其添加到url
列表中。
并发执行
with ThreadPoolExecutor(max_workers=100) as executor:
executor.map(get_ip, url)
- 使用
ThreadPoolExecutor
创建一个线程池,最大工作线程数设为100。 - 使用
executor.map()
方法将get_ip
函数应用到url
列表中的每个元素上,实现并发执行。
注释
"""
http://192-168-1-93.pvp5422.bugku.cn
http://192-168-1-173.pvp5422.bugku.cn
"""
- 这些注释展示了两个示例URL,可能是之前运行脚本时发现的可访问主机。
注意事项
- 安全性: 在实际使用中,扫描网络可能会被认为是恶意行为,特别是在没有得到授权的情况下。确保您有权限对目标网络进行此类操作。
- 性能: 并发请求数量设置为100,这可能会对网络和服务器造成较大压力。根据实际情况调整
max_workers
的值。 - 异常处理: 当前代码没有处理请求过程中可能出现的异常,例如网络错误或超时。建议增加适当的异常处理机制,以提高代码的健壮性。