Skip to content

Commit d8485d5

Browse files
committed
update
1 parent c5c1858 commit d8485d5

32 files changed

Lines changed: 940 additions & 719 deletions

README.md

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- bug很多,持续优化中...
66

77
## 参考
8-
另一位作者用golang实现的 [lightsocks](https://github.com/gwuhaolin/lightsocks),关于ss代理的原理可以看他的教程:[你也能写个 Shadowsocks](https://github.com/gwuhaolin/blog/issues/12)
8+
另一位作者用golang实现的[lightsocks](https://github.com/gwuhaolin/lightsocks),关于ss代理的原理可以看他的教程:[你也能写个 Shadowsocks](https://github.com/gwuhaolin/blog/issues/12)
99

1010
本人用java实现的一些细节写在博文里:[自己写个shadowsocks](https://xuranus.github.io/2018/11/27/%E8%87%AA%E5%B7%B1%E5%86%99%E4%B8%AAshadowsocks/)
1111

@@ -17,33 +17,35 @@ mvn package -Dmaven.test.skip=true
1717
生成的jar包位于`target`下。
1818

1919
## 使用
20-
1. 本地配置
21-
```js
22-
{
23-
"host":"127.0.0.1",
24-
"hostPort":9999,
25-
"localPort":8888,
26-
"method":"simple",
27-
"password":"F9C77CB58B2F6E05B01BB22B554DFECAF4D89CCF7B6F600C993E3D4B9362CD40373B35688EC9AC313433F8975FA05B84EF227839E27DCC0659BD2D90E4C3BBC1125A10299BE3084295988DA271262A3F6756A50A041FA836254687AE3A8C77C5B97A00FA38242715D6BA17ECF5020F738ACEDEA7FDADBF9D21F7529E7E20F157D0CBA3D7DBE0F3FB536A4E07E15CB35076C6D29218B1235E8943325166A975BE547483DAAB1EFF72C4488261D40DA1B8AAB4B6E86D0144195891D5EE0EE7644FC0D1D33CF08028794AAFA41D6C88E9302E9A03145D81D96B70B74909DDC2638F86BC65E6691694C8F64C118596DF41EB1C47EA459FA61AED0BDC7F2CF2E513FC"
28-
}
29-
```
30-
保存为`localConfig.json`
31-
32-
2. 代理服务器配置
33-
```js
34-
{
35-
"port":9999,
36-
"method":"simple",
37-
"password":"F9C77CB58B2F6E05B01BB22B554DFECAF4D89CCF7B6F600C993E3D4B9362CD40373B35688EC9AC313433F8975FA05B84EF227839E27DCC0659BD2D90E4C3BBC1125A10299BE3084295988DA271262A3F6756A50A041FA836254687AE3A8C77C5B97A00FA38242715D6BA17ECF5020F738ACEDEA7FDADBF9D21F7529E7E20F157D0CBA3D7DBE0F3FB536A4E07E15CB35076C6D29218B1235E8943325166A975BE547483DAAB1EFF72C4488261D40DA1B8AAB4B6E86D0144195891D5EE0EE7644FC0D1D33CF08028794AAFA41D6C88E9302E9A03145D81D96B70B74909DDC2638F86BC65E6691694C8F64C118596DF41EB1C47EA459FA61AED0BDC7F2CF2E513FC"
38-
}
39-
```
40-
保存为`serverConfig.json`
41-
42-
支持的method:
43-
- none(无加密,不要使用)
44-
- simple(256个byte乱排构成的十六进制密码,上述例子中所示,原理为置换算法,已经实现,有一定的加密能力)
45-
- AES(尚在学习密码学,bug很多)
46-
**注意!当前AES加密还没完善,请勿使用**
20+
1. 本地配置`localConfig.json`
21+
22+
```json
23+
{
24+
"mode": "local",
25+
"host":"127.0.0.1",
26+
"hostPort":9999,
27+
"localPort":8888,
28+
"method":"simple",
29+
"password":"F9C77CB58B2F6E05B01BB22B554DFECAF4D89CCF7B6F600C993E3D4B9362CD40373B35688EC9AC313433F8975FA05B84EF227839E27DCC0659BD2D90E4C3BBC1125A10299BE3084295988DA271262A3F6756A50A041FA836254687AE3A8C77C5B97A00FA38242715D6BA17ECF5020F738ACEDEA7FDADBF9D21F7529E7E20F157D0CBA3D7DBE0F3FB536A4E07E15CB35076C6D29218B1235E8943325166A975BE547483DAAB1EFF72C4488261D40DA1B8AAB4B6E86D0144195891D5EE0EE7644FC0D1D33CF08028794AAFA41D6C88E9302E9A03145D81D96B70B74909DDC2638F86BC65E6691694C8F64C118596DF41EB1C47EA459FA61AED0BDC7F2CF2E513FC"
30+
}
31+
```
32+
33+
34+
2. 代理服务器配置`serverConfig.json`
35+
```js
36+
{
37+
"mode": "server",
38+
"port":9999,
39+
"method":"simple",
40+
"password":"F9C77CB58B2F6E05B01BB22B554DFECAF4D89CCF7B6F600C993E3D4B9362CD40373B35688EC9AC313433F8975FA05B84EF227839E27DCC0659BD2D90E4C3BBC1125A10299BE3084295988DA271262A3F6756A50A041FA836254687AE3A8C77C5B97A00FA38242715D6BA17ECF5020F738ACEDEA7FDADBF9D21F7529E7E20F157D0CBA3D7DBE0F3FB536A4E07E15CB35076C6D29218B1235E8943325166A975BE547483DAAB1EFF72C4488261D40DA1B8AAB4B6E86D0144195891D5EE0EE7644FC0D1D33CF08028794AAFA41D6C88E9302E9A03145D81D96B70B74909DDC2638F86BC65E6691694C8F64C118596DF41EB1C47EA459FA61AED0BDC7F2CF2E513FC"
41+
}
42+
```
43+
44+
Method:
45+
- [x] none(无加密)
46+
- [x] Simple(置换算法)
47+
- [ ] AES
48+
4749

4850
3. 运行
4951
本地:`java -jar lightsocks.jar -c localConfig.json`
@@ -52,7 +54,7 @@ mvn package -Dmaven.test.skip=true
5254
4. 配置本地socks5代理
5355
地址为服务器地址,端口为`localConfig.json`中的`localPort`
5456

55-
测试
57+
Linux下测试
5658
```bash
5759
export ALL_PROXY=socks5://127.0.0.1:8888
5860
curl baidu.com

src/main/java/Main.java

Lines changed: 41 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,76 @@
1-
import client.Client;
21
import crypto.Crypto;
2+
import server.LocalServer;
33
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
5-
import server.Server;
6-
import util.LocalConfig;
7-
import util.Mode;
8-
import util.ServerConfig;
9-
import util.Util;
5+
import server.RemoteServer;
6+
import util.*;
107

118
public class Main {
129

1310
private final static Logger logger = LoggerFactory.getLogger(Main.class);
1411

15-
private static void printHelpInfo() {
16-
System.out.println("Usage: java -jar lightsocks.jar -c config.json --client | --server");
12+
13+
public static void checkCrypto(Crypto crypto) {
14+
if(crypto == null) {
15+
logger.error("unknown crypto");
16+
System.exit(1);
17+
}
1718
}
1819

1920
public static void main(String[] args) {
20-
logger.info("starting.");
21+
logger.info("starting...");
2122
String configPath = null;
2223
Mode mode = Mode.Unknown;
2324

24-
for(int i=0;i<args.length;i++) {
25-
if(args[i].equals("-c") && i + 1 < args.length) {
25+
26+
// load config path
27+
for (int i = 0; i < args.length; i++) {
28+
if (args[i].equals("-c") && i + 1 < args.length) {
2629
configPath = args[i + 1];
2730
i++;
28-
} else if(args[i].equals("-h")) {
29-
printHelpInfo();
31+
} else if (args[i].equals("-h")) {
32+
Util.printHelpInfo();
3033
System.exit(0);
3134
}
3235
}
3336

37+
// decide running mode
38+
mode = ConfigLoader.loadConfigMode(configPath);
39+
if (mode == Mode.Local) {
40+
LocalConfig config = ConfigLoader.loadAsLocalConfig(configPath);
3441

35-
try {
36-
if(Util.getJsonObjectFromFile(configPath).get("mode").getAsString().equalsIgnoreCase("server")) {
37-
mode = Mode.Server;
38-
} else if (Util.getJsonObjectFromFile(configPath).get("mode").getAsString().equalsIgnoreCase("local")) {
39-
mode = Mode.Client;
40-
}
41-
} catch (Exception e) {
42-
logger.error("", e);
43-
System.exit(1);
44-
}
45-
46-
47-
if(mode == Mode.Client) {
48-
LocalConfig localConfig = LocalConfig.loadConfigFromFile(configPath);
49-
if(localConfig == null) {
50-
logger.info("error: failed to load local config, exit.");
42+
if (config == null) {
43+
logger.info("failed to load local config.");
5144
System.exit(1);
5245
} else {
53-
logger.info(localConfig.toString());
46+
logger.info(config.toString());
5447
}
5548

56-
Client local = new Client(localConfig.getHost(),localConfig.getHostPort(),localConfig.getLocalPort());
57-
Crypto crypto = localConfig.getCrypto();
58-
if(crypto==null) {
59-
logger.info("error: failed to init cipher,exit.");
60-
System.exit(1);
61-
} else {
62-
Client.crypto = crypto;
63-
}
64-
local.listen();
49+
checkCrypto(config.getCrypto());
50+
51+
LocalServer localServer = new LocalServer(config.getHost(), config.getHostPort(), config.getLocalPort());
52+
LocalServer.crypto = config.getCrypto();
53+
localServer.listen();
6554

6655
} else if (mode == Mode.Server) {
56+
ServerConfig config = ConfigLoader.loadAsServerConfig(configPath);
6757

68-
ServerConfig serverConfig = ServerConfig.loadConfigFromFile(configPath);
69-
if(serverConfig == null) {
70-
logger.info("error: failed to load server config, exit.");
58+
if (config == null) {
59+
logger.info("failed to load server config.");
7160
System.exit(1);
7261
} else {
73-
logger.info(serverConfig.toString());
62+
logger.info(config.toString());
7463
}
7564

76-
Server server = new Server(serverConfig.getPort());
77-
Crypto crypto = serverConfig.getCrypto();
78-
if(crypto==null) {
79-
logger.info("error: failed to init cipher,exit.");
80-
System.exit(1);
81-
} else {
82-
Server.crypto = crypto;
83-
}
84-
server.listen();
65+
checkCrypto(config.getCrypto());
66+
67+
RemoteServer remoteServer = new RemoteServer(config.getPort());
68+
RemoteServer.crypto = config.getCrypto();
69+
remoteServer.listen();
70+
71+
} else {
72+
logger.error("unknown running mode");
73+
System.exit(1);
8574
}
8675

8776

src/main/java/client/Client.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/main/java/client/ClientThread.java

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)