å ¨å±ä»£ç
以ä¸è®¨è®ºä» é对windows
èµ·å
æè¿æ个æåé®æå½æ们ç代ç软件ï¼v2raynï¼è®¾ç½®æå ¨å±ä»£çå
æ¯å¦èªå·±åçjavaç¨åºä¼ä¸ä¼å代ççå½±å
æ©å±ä¸ä¸ä¹å¯ä»¥ç解æè¿éçå ¨å±ä»£çæ¯ä¸æ¯ççæ¯å ¨å±ç
æ¢ç©¶
常è§
ç´è§æ¥è®²ï¼é常æ们ç代çæ¯å¨æå¡å¨ä¸æ建æå¡ç«¯
æ¬æºä¸æ建客æ·ç«¯
客æ·ç«¯é 置好è¿æ¥
设置æ¬å°çå¬åªä¸ªç«¯å£
ç¶åå¨æ们ç软件ä¸é 置代çå°åï¼å®¢æ·ç«¯çµèå°åï¼å端å£
软件çæµéå°±ä¼éè¿å®¢æ·ç«¯
åç±å®¢æ·ç«¯è¿è¡çç¥éæ©è¿è¡æµéåå
为äºé¿å 被æ¦æª
æäºä»£ç软件ä¹ä¼å¯¹æµéè¿è¡ä¼ªè£
å¦v2rayN
å ¨å±
å¨v2rayNä¸æä¾äºä¸ä¸ªå ¨å±ä»£ççé项ï¼ä¸åçæ¬è½¯ä»¶å«æ³ä¸åï¼
å ¶åçæ¬è´¨ä¸æ¯ä¿®æ¹windowsç³»ç»ä¸ç代ç设置(å¯éè¿æ³¨å表)
å½æ们设置äºç³»ç»ä»£çå
软件å¯ä»¥éæ©ç´æ¥è·åç³»ç»ä»£ç
æäºè½¯ä»¶é»è®¤æ¯ä½¿ç¨ç³»ç»ä»£ççå¦IE/Edge/Firefox
ä½å¦æ软件é»è®¤ä¸ä½¿ç¨ç³»ç»ä»£çï¼æè 软件ä¸æ¯æ设置代ç
åæ们çç³»ç»ä»£çé ç½®æ¯ä¸çæç
è¿å°±æäºä¸å¼å§çé®é¢
v2rayNä¸é ç½®äºå ¨å±ä»£ç,èªå·±åçjavaç¨åºä¼ä¸ä¼å代ççå½±å
è¿åå³äºä½ æ没æå¨javaç¨åºéé ç½®
Java代ç
å¯ä»¥æå¨æå®
ä¹å¯ä»¥éè¿
java.net.useSystemProxies
使ç¨ç³»ç»ä»£ç
åç请æ±
import lombok.extern.slf4j.Slf4j;
import sun.net.www.protocol.http.HttpURLConnection;
import java.io.IOException;
import java.net.URL;
/**
* @author 许å¹å®
* @date 2022/6/1 15:31
*/
@Slf4j
public class Demo {
public static void main(String[] args) throws Exception {
String property = System.getProperty("java.net.useSystemProxies");
log.info("java.net.useSystemProxies:{}", property);
HttpURLConnection googleConnection = null;
Object content = null;
try {
URL url = new URL("http://www.google.com");
googleConnection = (HttpURLConnection) url.openConnection();
googleConnection.setConnectTimeout(3000);
googleConnection.connect();
content = googleConnection.getContent();
log.info("withOutProxy:{}", content);
} catch (IOException e) {
log.info("withOutProxy occur error");
}
try {
googleConnection = new HttpURLConnection(new URL("http://www.google.com"), "127.0.0.1", 10809);
googleConnection.setConnectTimeout(3000);
googleConnection.connect();
content = googleConnection.getContent();
log.info("customProxy:{}", content);
} catch (IOException e) {
log.info("customProxy occur error");
}
try {
googleConnection = new HttpURLConnection(new URL("http://www.google.com"), null);
googleConnection.setConnectTimeout(3000);
googleConnection.connect();
content = googleConnection.getContent();
log.info("systemProxy:{}", content);
} catch (IOException e) {
log.info("systemProxy occur error");
}
// è¾åºç»æ
// 10:34:36.114 [main] INFO cn.ikarosx.Demo - java.net.useSystemProxies:false
// 10:34:39.169 [main] INFO cn.ikarosx.Demo - withOutProxy occur error
// 10:34:39.265 [main] INFO cn.ikarosx.Demo - customProxy:sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@5479e3f
// 10:34:42.279 [main] INFO cn.ikarosx.Demo - systemProxy occur error
// java.net.useSystemProxieså¯ä»¥æå®ä½¿ç¨ç³»ç»ä»£çåæ°
// éè¦æ·»å èææºå¯å¨åæ°-Djava.net.useSystemProxies=trueï¼ä¸è½å¨ä»£ç 设置
// On recent Windows systems and on Gnome 2.x systems it is possible to tell the java.net stack, setting this property to true, to use the system proxy settings (both these systems let you set proxies globally through their user interface). Note that this property is checked only once at startup.
// ç³»ç»ä»£çè¾åºç»æ
// 10:55:49.416 [main] INFO cn.ikarosx.Demo - java.net.useSystemProxies:true
// 10:55:49.542 [main] INFO cn.ikarosx.Demo - withOutProxy:sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@5479e3f
// 10:55:49.653 [main] INFO cn.ikarosx.Demo - customProxy:sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@27082746
// 10:55:49.773 [main] INFO cn.ikarosx.Demo - systemProxy:sun.net.www.proto[email protected]
}
}
RestTemplate
public static void main(String[] args) throws Exception {
String property = System.getProperty("java.net.useSystemProxies");
log.info("java.net.useSystemProxies:{}", property);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> forEntity = restTemplate.getForEntity("http://www.google.com", String.class);
System.out.println(forEntity.getStatusCode());
// 10:59:40.075 [main] INFO cn.ikarosx.Demo - java.net.useSystemProxies:true
// 10:59:40.346 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP GET http://www.google.com
// 10:59:40.360 [main] DEBUG org.springframework.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*]
// 10:59:40.466 [main] DEBUG org.springframework.web.client.RestTemplate - Response 200 OK
// 10:59:40.499 [main] DEBUG org.springframework.web.client.RestTemplate - Reading to [java.lang.String] as "text/html;charset=ISO-8859-1"
// 200 OK
}
å ¶ä»é ç½®
https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html
çå ¨å±
é£æ没æä»ä¹åæ³å®ç°è®©ä¸æ¯æ代çç软件ä¹èµ°ä»£çå¢ï¼
ssTap/proxifier/freeCapå°±å¯ä»¥å®ç°ç±»ä¼¼çåè½
大è´æ¯å¦ä¸å ç§æ¹æ¡
èæç½å¡
åçæ¯æ°å»ºä¸ä¸ª(Tun/Tap)èæç½å¡
ç¶åä¿®æ¹è·¯ç±è§å
å°æäºç½æ®µç请æ±ç»ç±è¿ä¸ªèæç½å¡å¤ç
å ·ä½ç½å¡æ¯å¦ä½å¤ççè¿é¨åä¸æ¯å¾æ¸ æ¥
æ¾äºå¾å¤èµæä¹æ²¡æçä¸å¤ªæ
è¿éå¼ç¨ä¸ç¯æç« è¯´çæ¯æ们ç客æ·ç«¯ä¼çå¬èæç½å¡
èæç½å¡æ¥æ¶å°åä¼åç»æ们ç客æ·ç«¯å»å¤ç
ssTap/vpn/wireguardæ¯è¿ä¹åç
å½æ们使ç¨ä¹åå¯ä»¥å¨ç½ç»éé å¨éæ¥çç½å¡
å¯ä»¥çå°å¤äºä¸ä¸ª
route print
å¯ä»¥æ¥çè·¯ç±è¡¨
Winsock LSPå«æ
è¿ç§æ¹å¼æ¯proxifierçå®ç°æ¹å¼
åèæç«
åçå°±æ¯è¯´åºç¨å±è¿è¡ç½ç»é讯æ¶ä¼è°ç¨Winsock API
LSPåçå°±æ¯å¨ä¸é´è¿è¡æ¦æªï¼è¾¾å°ä¿®æ¹çç®ç
æ ¹æ®è¿ç¯æç« æ说
æ¥ç注å表(proxifier v3.42)å¯ä»¥çå°