第一课,从IP代理开始
2023-12-25 20:23:24
小白学安全
第一课,从IP代理开始
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
一、IP 代理的定义与原理
??IP 代理,也称为网络代理,是一种中间服务,它在客户端和目标服务器之间建立一个转发连接。
??当客户端发出请求时,代理服务器会代替客户端与目标服务器建立连接,并将接收到的数据返回给客户端。这种方式可以有效隐藏客户端的真实 IP 地址,保护用户隐私。
二、IP 代理的使用方法
- 选择合适的代理服务器:在选择代理服务器时,需要考虑服务器的稳定性、速度和安全性。一些公共代理服务器可能会泄露用户的个人信息,因此选择可信赖的代理服务器非常重要。
- 设置代理服务器:在浏览器或操作系统中设置代理服务器的 IP 地址和端口号。不同的浏览器和操作系统可能有不同的设置方法,因此需要根据具体情况进行设置。
- 使用代理工具:许多软件和工具都支持代理功能,如浏览器插件、代理软件等。这些工具可以帮助用户更方便地管理和使用代理。
- 下述开始讲解采用 python 编写的爬取免费 IP 代理地址的程序:
??首先引入的 python 库
import requests
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()
import threadpool
import time
import random
import os
??获取 89.cn 和 3366.net 网站免费的 IP 代理信息
def get_proxy_html_89():
datas = []
page = 1
while page <= 100:
url = 'https://www.89ip.cn/index_'+str(page)+'.html'
response = requests.get(url,verify=False)
# 解析HTML
soup = BeautifulSoup(response.content, 'html.parser')
# 提取表格
table = soup.find('table', {'class': 'layui-table'})
# 提取表格数据
rows = table.find_all('tr')
for row in rows[1:]:
data = [td.text.strip() for td in row.find_all('td')]
datas.append(data)
page += 1
# 返回结果
datas = remove_duplicates(datas)
return datas
def get_proxy_ip3366_net():
datas = []
for i in range(1,10):
params = {
'action': 'china',
'page': str(i),
}
response = requests.get('https://proxy.ip3366.net/free/', params=params)
# 解析HTML
soup = BeautifulSoup(response.content, 'html.parser')
# 提取表格
table = soup.find('table', {'class': 'table table-bordered table-striped'})
# 提取表格数据
rows = table.find_all('tr')
for row in rows[1:]:
td_IP = row.find('td',{'data-title':'IP'}).text.strip()
td_PORT = row.find('td',{'data-title':'PORT'}).text.strip()
td_ADDR = row.find('td',{'data-title':'位置'}).text.strip()
td_END_TIME = row.find('td',{'data-title':'最后验证时间'}).text.strip()
datas.append([td_IP,td_PORT,td_ADDR,td_END_TIME])
# 返回结果
datas = remove_duplicates(datas)
return datas
# list去重
def remove_duplicates(lst):
return [item for item in lst if lst.count(item) == 1]
??对爬取到的代理进行测试
def test_proxy(data):
ip = data[0]
port = data[1]
proxy_url = ip+":"+port
try:
proxy = {'http': proxy_url, 'https': proxy_url}
response = requests.get('http://httpbin.org/ip', proxies=proxy, timeout=5)
if response.status_code == 200:
test_proxy_ip = response.json()['origin'].replace(" ","")
if test_proxy_ip==ip:
return data
else:
return None
else:
return None
except Exception:
return None
def test_one_proxy(proxy_url):
ip = proxy_url.split(":")[0]
try:
proxy = {'http': proxy_url, 'https': proxy_url}
response = requests.get('http://httpbin.org/ip', proxies=proxy, timeout=1)
if response.status_code == 200:
test_proxy_ip = response.json()['origin'].replace(" ","")
if test_proxy_ip == ip:
return True
else:
return False
else:
return False
except Exception:
return False
??运用多线程进行IP 代理测试
def multithreading(datas):
#多线程测试代理可用性
# 设置多线程数量
pools = 100
works = []
for data_one in datas:
func_params = [data_one]
works.append((func_params, None))
pool = threadpool.ThreadPool(pools)
reqs = threadpool.makeRequests(test_proxy, works, get_result)
[pool.putRequest(req) for req in reqs]
pool.wait()
pool.dismissWorkers(pools, do_join=True)
def get_result(request, results):
#获取多线程结果
try:
if results != None:
with open('results.txt','a',encoding="utf-8") as f:
f.write(str(results)+"\n")
f.close
# print("[+]",results)
except Exception as e:
print(e.args)
??代码入口,用于检测是否存在代理信息,不存在则爬取
def get_proxy():
if os.path.exists('results.txt'):
os.remove('results.txt')
start_time = time.time()
datas = get_proxy_html_89()+get_proxy_ip3366_net()
multithreading(datas)
end_time = time.time()
# print('总共耗时:', end_time - start_time)
??随机读取文本中的一个代理并测试可用性
def random_proxy():
if not os.path.exists('results.txt'):
# print("未发现存在可用代理,开始爬取ing")
get_proxy()
random_proxy()
with open('results.txt','r',encoding="utf-8") as f:
lines = f.readlines()
f.close
if len(lines) == 0 :
# print("未发现存在可用代理,开始爬取ing")
get_proxy()
random_proxy()
else:
proxy = random.choice(lines)
proxys = proxy.replace("'","").replace(" ","").replace("[","").replace("]","").split(",")
ip = proxys[0]
port = proxys[1]
proxy_url = ip+":"+port
if test_one_proxy(proxy_url):
return proxy_url
else:
lines.remove(proxy)
with open('results.txt','w',encoding="utf-8") as f:
f.writelines(lines)
f.close
return random_proxy()
if __name__ == '__main__':
print(random_proxy())
三、IP 代理在网络安全中的优势
- 保护隐私:通过隐藏真实 IP 地址,避免个人信息被泄露或滥用。这对于需要保护个人隐私的用户来说非常重要。
- 提高访问速度:代理服务器通常具有更快的网络连接速度,可以提高访问速度。这对于需要快速访问网络资源的人来说非常有用。
- 突破限制:某些公司存在访问限制,可使用符合ACL策略要求内的IP 代理访问对应网站。这对于需要做资源访问限制的同事来说很重要。
- 增强安全性:代理服务器可以提供额外的安全层,如防火墙、数据加密等,提高网络安全。这对于需要保护网络安全的人来说非常重要。
四、IP 代理在网络安全中的应用场景
- 避免网络监控:在一些敏感行业或地区,使用代理可以避免被网络监控机构追踪和监控。这对于需要保护个人隐私或商业机密的用户来说非常重要。
- 保护个人隐私:通过隐藏真实 IP 地址,避免个人信息被泄露或滥用。这对于需要保护个人隐私的用户来说非常重要。
- 提高工作效率:使用代理可以绕过某些网络限制,提高工作效率。这对于需要快速访问网络资源或避免网络限制的用户来说非常有用。
五、总结
??因此,我们应该了解并掌握 IP 代理的使用方法,以便更好地保护自己的网络安全。同时,也要注意选择正规、可靠的代理服务器和工具,确保网络安全得到保障。
六、打广告时间
??文本中的代码,可通过回复本公众号“
IP代理”获取到,谢谢。
?? 感谢阅读,如果觉得还不错的话,欢迎分享给更多喜爱的朋友~
文章来源:https://blog.csdn.net/weixin_40114827/article/details/135140767
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!