目录

充电学习中...

X

修改IP地址,看这一篇就够了!

前言

本文将介绍各个平台下,通过软硬件方式修改IP的各种思路和方法,基本涵盖了所有使用场景和需求,如果你正在找相关的内容,那一定可以帮到你!

本文探讨的是修改出口IP,即公网IP,而内网IP的修改不在本文的探讨范围

基本思路

实现修改IP的方式有很多,但是其底层逻辑可以分成两类:

1.直接修改

正如解决“如何将一头大象放入冰箱”一样,改IP本身就有一些简单粗暴的解决方式,以手机为例,先打开再关闭手机的飞行模式可能就能得到一个不同的出口IP,不过这一过程并不可控,无法保证每一次都能出现预期的结果

2.使用代理

使用代理往往是更好的实现方式,顾名思义,使用代理,可以让代理服务器处理原本从自身IP发出的请求,从而实现修改出口IP,这也是目前最主流的方法

直接修改

比起“直接修改”的说法,其实更好的描述方式是“让上游重新为设备分配IP”

PC端

PC环境下,可以使用拨号方式更改出口IP,前提是使用拨号上网的方式,每次重新拨号,就可以得到一个同一网段的新IP,这也是市面上的VPS不能用作公网服务器的原因,因为IP会动态变化

ADSL拨号的的代码可以参考这个项目

事实上,移动设备本身也可以拨号,只不过大多数的移动端系统阉割了此功能

移动端

image.png

移动端环境下,实现这一目标的方法就是通过前文说到的,打开再关闭飞行模式,本质是让基站重新为设备分配一个IP。

浏览器

原生环境下的浏览器IP取决于操作系统,下文会详细解释

使用代理

和直接修改对应的方法就是使用代理,顾名思义,代理就是通过代理服务器来访问目标,而在谈论使用代理IP之前,我们先来了解一下市面上常用的代理IP协议

HTTP/HTTPS

HTTP是应用层(OSI第7层)的代理协议,只支持代理TCP,并且支持数据包解析,例如你可以在代理服务器中解析代理的HTTP流量,对经过对请求进行或响应进行审查和修改,代理服务器证书被信任的情况下,还可以处理HTTPS的请求,这就是为什么你在使用Fiddler、Charles等抓包工具时,它会要求你下载并信任他的证书。

Socks4/Socks5

Socks是会话层(OSI第5层)的代理协议,支持代理TCP/UDP(UDP仅Socks5支持),仅转发数据包而不解析请求,适用于任意应用(如FTP、BT、游戏等)。

实际场景中,代理服务器往往同时支持Socks和HTTP协议。

L2TP

L2TP全称Layer 2 Tunneling Protocol,是数据链路层(OSI第2层)的代理协议,L2TP 本身不加密,常与 IPSec 协议组合(L2TP/IPSec)使用,提供安全加密通道。

SSTP

SSTP全称Secure Socket Tunneling Protocol,是传输层(OSI第4层)的传输协议,由微软开发,原生支持Windows,其他平台需要第三方支持,SSTP隐蔽性高,可以伪装成HTTPS流量

实际场景中,代理服务器往往同时支持L2TP和SSTP协议

下面我将介绍各个层级下代理IP的使用

在系统层使用代理

1.使用系统代理

对于HTTP/Socks协议的代理,在PC平台下可以使用Clash、V2Ray等工具设置系统代理,部分应用,例如浏览器将默认使用系统代理发起请求。

image.png

在移动端下(安卓、IOS),可以在Wifi端高级选项中设置系统代理,仅Wifi环境下生效,并且只影响通过系统代理发起请求端应用。

image.png

可以看到无论是PC还是移动端,这种方式都只能影响使用系统代理发送请求端应用,如果目标应用的请求不走系统代理,则不起作用

2.使用VPN

本文只讨论L2TP协议,PC和移动端往往原生支持添加L2TP类型的VPN,如果你的设备不支持,可以自行查找第三方工具

image.png

此外,在移动端借助一些工具可以将Socks/HTTP代理转换为VPN的形式从而使得原本不走系统代理的应用强制使用代理进行请求

Android下可以使用appproxy

IOS下可以用Shadowrocket

3.Iptables+Redsock

  • iptables
    iptables 是 Linux 的防火墙工具,可以通过规则匹配和重定向特定流量(如目标端口、IP 等)。但它本身不支持代理协议(如 SOCKS/HTTP)。
  • redsocks
    redsocks 是一个透明代理工具,能够将 iptables 重定向的流量转换为代理协议(如 SOCKS5/HTTP),并转发到真正的代理服务器(如 Shadowsocks 服务端)。

这是将SOCKS/HTTP协议的代理应用到操作系统全局的另一种实现方式,利用iptables可以将所有流量转发到redsocks所在端口,然后再转发到代理服务器,这种方式需要拥有root权限,以安卓为例,iptables配置如下

//将80端口(HTTP)的流量转发到16666端口
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to 16666
//将443端口(HTTPS)的流量转发到16666端口
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to 16666

redsocks的配置文件如下

base {
    log_debug = off;
    log_info = off;
    log = stderr;
    daemon = off;
    redirector = iptables;
}


redsocks {
    bind = "127.0.0.1:16666";
    relay = "";
    type = socks5;
    autoproxy = 0;
    timeout = 13;
    login = "";
    password = "";
}

其中bind表示监听的本地地址,relay是代理地址,login和password是代理的用户名和密码(如果有身份验证),如果你将代理地址填为抓包工具(例如Fiddler)的地址,那么就可以实现流量捕获的功能,当然如果没有请求所能信任的SSL证书,HTTPS请求内容将是加密状态

在应用层使用代理

1.浏览器

浏览器一般默认使用系统代理,如果需要可以单独配置,火狐(Firefox)内核下可以在浏览器设置页面直接添加代理。Chrome内核(例如新版Edge、Chrome)浏览器可以通过浏览器插件来实现,例如SwitchyOmega

image.png

2.其他应用

对于开发者来说,可以使用网络请求框架将代理IP颗粒度细化到指定请求,例如使用okhttp发起网络代理的请求

// 1. 创建代理对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("代理地址", 8080));
  
// 2. 创建OkHttpClient并设置代理
OkHttpClient client = new OkHttpClient.Builder()
	.proxy(proxy)
	.build();

对于第三方应用,开发者往往会设置不走代理直接请求,这时候只能将代理的作用范围扩大到全局或者注入代码修改目标应用来使得其通过代理发起请求

在硬件层使用代理

如果你在寻找一种隐蔽性强,无感知,且不需要Root权限的代理方式,那么硬件层的代理是个绝妙的选择。实现的方式是,将VPN部署在路由器上,再由路由器产生多个Wifi,每个Wifi对应不同的出口IP,终端设备只需要连接特定的wifi就可以使用不同的出口IP。这种方式需要特定的路由器硬件,以及用于VPN的支持L2TP等协议等代理

实现流程如下

软路由.png

某软路由后台界面截图,有硬件方面需求可私信了解

发射Wifi页面

161420093a8ef4fc6155cc69496fe08.png

VPN页面

64bb95fca014cfb8bc4435e60ff1b20.png

终端搜索到的Wifi列表

image.png

各类代理IP介绍

新入行的朋友可能对于市面上售卖的种类繁多的代理IP类型产生困扰,这里一次性介绍清楚

IP来源

  • 扫描代理
    通过SYN等方式在网上扫描得到的代理,质量极不稳定,通常是对方无意间暴露的代理服务,IP归属地也无法控制,实效性低,风控权重低甚至早就被拉黑,网上能找到的免费代理很多是这种
  • 住宅代理
    顾名思义,住宅代理使用的是运营商分配给普通家庭用户的代理,通过住宅代理发起请求,可以使得网络请求更加贴近真实用户,同时,住宅代理的价格也略高
  • 数据中心代理
    来自于运营商服务器提供的代理,例如是商家自己搭建的VPS代理池,与住宅代理相比,数据中心代理速度快,成本低,风控权重低于住宅,在登录、注册等一些风控严格的场景下可能被屏蔽
  • 4G代理
    4G代理通过实际的移动网络(如4G LTE网络)分配IP地址,其风控权重最高,非常适合用于一些移动端的场景,但是其价格一般高于住宅代理,且稳定性较差,并且由于通过移动网络分配IP,所以其IP往往不能长时间固定。4G代理的带宽取决于其网络信号,通常带宽较低
  • 案例
    案例1 只有国内IP
    案例2
    案例3

代理可见性

按照目标服务器对于代理的可见性,可以将代理分为透明、匿名、高匿三种类型,区别如下

可见性目标是否能知道请求来自代理目标是否能获取到原IP
透明
匿名
高匿

可以根据不同的目标来选择不同可见性的代理,说一个反直觉的结论,在爬虫采集场景下,透明、匿名、高匿代理三者往往都是可用的,原因是透明代理服务器是通过请求头(例如X-Forwarded-for)来告知目标服务器请求来自于哪个IP地址,而请求头是可以伪造的,这就导致了大多数目标服务器会忽略代理服务器的IP所提供的源IP地址,只记录代理服务器IP

image.png

试想一下,如果目标服务器从请求头中记录发起方的IP地址,那么只要修改请求头就可以随意地伪造IP(某些老旧网站可能仍然有这个漏洞),其后果比被代理服务器代理请求严重的多,因为前者没有任何额外成本

代理时效性

根据代理IP的连续可用时间,可以将代理划分为短效代理和长效代理。导致代理不可用的原因可能是网络中断(例如提供扫描代理的服务器的代理服务被关闭,或者提供4G代理的设备信号中断等)和IP地址变动了(即上游提供方重新分配了IP地址)。

代理请求形式

  • 静态代理
    静态代理的呈现形式是直接的IP:端口号,使用静态代理时,请求方直接与代理服务器通信,并且IP地址固定,适用于一些连续性的业务。同时请求方需要自行判断代理的可用性。
  • 隧道(动态)代理
    和静态代理不同,隧道代理的提供商会在后端做好例如鉴权、IP可用性测试、请求并发、IP归属地区分、连续性请求等管理,然后提供一个包装好的服务地址,往往提供的是一个域名,请求方不直接与代理服务通信。使用隧道代理时,请求方只需要关注自身业务请求即可

写在最后

最后,如果你仍然不知道本文涉及到的软硬件工具如何获取、如何使用以及如何选择使用适合的使用场景等,欢迎你在评论、私信或者简介处联系,我将在时间允许的情况下提供支持


标题:修改IP地址,看这一篇就够了!
作者:Cubeeeee
地址:http://blog.nps.fuguicun.com/articles/2025/06/24/1750758546195.html