前言
在渗透测试或者爬虫运行过程中,目标服务器会记录下我们的IP,甚至会封锁我们的IP,所以我们需要隐藏自己的IP。这时就需要用到代理服务器,我们将自己的请求交给代理服务器,由代理服务器将我们的请求交给目标服务器,目标服务器只会记录下代理服务器的IP地址。
从IP代理的隐蔽性级别进行划分,代理可以分为三种,即高度匿名代理、普通匿名代理和透明代理。
代理类型 | 代理服务器端的配置 | 描述 |
---|---|---|
透明代理 | REMOTE_ADDR = Proxy IP;HTTP_VIA = Proxy IP;HTTP_X_FORWARDED_FOR = Your IP | 透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。 |
匿名代理 | REMOTE_ADDR = proxy IP;HTTP_VIA = proxy IP;HTTP_X_FORWARDED_FOR = proxy IP | 匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。 |
高匿代理 | REMOTE_ADDR = Proxy IP;HTTP_VIA = Proxy IP;HTTP_X_FORWARDED_FOR = Random IP address | 高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。 |
本文将讲述如何使用免费代理IP进行IP隐藏、如何配置代理IP、如何爬取代理IP等。
IP 隐藏
先来看一个获取免费代理IP的网站:
其他提供免费代理 IP 的网站:
https://seofangfa.com/proxy/;
https://ip.jiangxianli.com/;
https://www.kuaidaili.com/free/inha/;
https://ip.ihuan.me/;
https://www.89ip.cn/index.html
Proxifier
有了免费代理的来源,下面使用 Proxifier 代理工具在 Windows 主机上进行代理 IP 的配置。
Proxifier 代理工具下载地址:http://www.proxifier.com/。
1、首先选取快代理上一个响应速度较快的代理:
2、运行 Proxifier ,点击 “Profile-Proxy Servers” 进行配置:
3、点击 check 检查代理是否正常,结果不能用……免费的就这质量了……:
4、硬着头皮多试几个,找到可用的代理:
免费代理
以上已经找到免费的公用代理,下面进行配置核验。
1、设置让火狐浏览器走系统代理IP,PC其他程序的不走代理(代理规则配置时,勾选桌面火狐浏览器快捷方式即可指定 firefox.exe
程序):
2、设置完毕,先打开谷歌浏览器查看本机IP,为我的真实IP地址(广州):
3、最后使用火狐浏览器查看本机 IP,为江西省宜春市的代理 IP 地址:
至此,已成功获取到免费的代理IP并进行本机IP地址的隐藏。
自动爬取
以上手动获取免费代理IP的过程太难受了……一个个手工测试,半天才能捞到一个有效的代理IP。忍不了,上Python爬虫脚本进行自动化识别爬取。
此处选择的是89免费代理IP网站:https://www.89ip.cn/
进行爬取,并且每一个IP都进行有效性测试(测试访问百度),并最终输出有效的IP地址。
直接上完整爬虫代码,已做代码备注,不一一分析:
# -*- coding: utf-8 -*-
# Project : 爬取代理IP并且测试可用IP
# Tool : PyCharm
import requests
from bs4 import BeautifulSoup
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}
# 提取网页源码
def getHtml(url):
try:
reponse = requests.get(url, headers=header)
reponse.raise_for_status()
reponse.encoding = reponse.apparent_encoding
return reponse.text
except:
return "网页源码提取错误"
# 解析网页,提取IP
def getIp(html, list):
try:
soup = BeautifulSoup(html, "html.parser")
tr = soup.find("tbody").find_all_next("tr")
for ip in tr:
# 提取IP
td = ip.find_next("td").string
td = str(td).replace(" ", "").replace("\n", "").replace("\t", "")
# 提取端口号
dk = ip.find_all_next("td")[1].string
dk = str(dk).replace(" ", "").replace("\n", "").replace("\t", "")
# 将IP和端口号进行连接
ip = td + ":" + dk
list.append(ip) # 再进IP地址存放至指定列表中去
except:
print("获取IP失败")
# 测试出可用IP
def ip_text(list, valid_IP):
try:
url = "https://www.baidu.com//"
for ip in list:
try:
rep = requests.get(url, proxies={'https': ip}, headers=header, timeout=0.5)
if rep.status_code == 200: # 如果放回的状态码是200,那么说明该IP地址可用
valid_IP.append(ip)
print("该代理IP有效:" + ip)
else:
print("该代理IP无效:" + ip)
except:
print("该代理IP无效:" + ip)
except:
print("IP测试失败")
if __name__ == '__main__':
valid_IP = [] # 有效IP地址
for i in range(1, 90): # 可自定义页数
ip_list = [] # 存放所有爬取到的ip
url = "https://www.89ip.cn/index_" + str(i) + ".html"
print(url)
html = getHtml(url)
getIp(html, ip_list)
ip_text(ip_list, valid_IP)
print("=" * 30)
print("测试完成,有效IP如下:")
print("-" * 30)
for a in valid_IP:
print(a)
print("=" * 30)
来看下运行效果:
然鹅……做好心理准备,爬取下来的IP,可能立马就失效了,毕竟免费的……