第一课,从IP代理开始

2023-12-25 20:23:24

小白学安全

第一课,从IP代理开始

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。



一、IP 代理的定义与原理

??IP 代理,也称为网络代理,是一种中间服务,它在客户端和目标服务器之间建立一个转发连接。
??当客户端发出请求时,代理服务器会代替客户端与目标服务器建立连接,并将接收到的数据返回给客户端。这种方式可以有效隐藏客户端的真实 IP 地址,保护用户隐私。

二、IP 代理的使用方法

  1. 选择合适的代理服务器:在选择代理服务器时,需要考虑服务器的稳定性、速度和安全性。一些公共代理服务器可能会泄露用户的个人信息,因此选择可信赖的代理服务器非常重要。
  2. 设置代理服务器:在浏览器或操作系统中设置代理服务器的 IP 地址和端口号。不同的浏览器和操作系统可能有不同的设置方法,因此需要根据具体情况进行设置。
  3. 使用代理工具:许多软件和工具都支持代理功能,如浏览器插件、代理软件等。这些工具可以帮助用户更方便地管理和使用代理。
  4. 下述开始讲解采用 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 代理在网络安全中的优势

  1. 保护隐私:通过隐藏真实 IP 地址,避免个人信息被泄露或滥用。这对于需要保护个人隐私的用户来说非常重要。
  2. 提高访问速度:代理服务器通常具有更快的网络连接速度,可以提高访问速度。这对于需要快速访问网络资源的人来说非常有用。
  3. 突破限制:某些公司存在访问限制,可使用符合ACL策略要求内的IP 代理访问对应网站。这对于需要做资源访问限制的同事来说很重要。
  4. 增强安全性:代理服务器可以提供额外的安全层,如防火墙、数据加密等,提高网络安全。这对于需要保护网络安全的人来说非常重要。

四、IP 代理在网络安全中的应用场景

  1. 避免网络监控:在一些敏感行业或地区,使用代理可以避免被网络监控机构追踪和监控。这对于需要保护个人隐私或商业机密的用户来说非常重要。
  2. 保护个人隐私:通过隐藏真实 IP 地址,避免个人信息被泄露或滥用。这对于需要保护个人隐私的用户来说非常重要。
  3. 提高工作效率:使用代理可以绕过某些网络限制,提高工作效率。这对于需要快速访问网络资源或避免网络限制的用户来说非常有用。

五、总结

??因此,我们应该了解并掌握 IP 代理的使用方法,以便更好地保护自己的网络安全。同时,也要注意选择正规、可靠的代理服务器和工具,确保网络安全得到保障。

六、打广告时间

??文本中的代码,可通过回复本公众号“ IP代理”获取到,谢谢。

?? 感谢阅读,如果觉得还不错的话,欢迎分享给更多喜爱的朋友~

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_40114827/article/details/135140767
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。