Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support hysteria port hopping #4

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v2
- name: Add commit id into version
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
run: SHA=$(git rev-parse --short HEAD) && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h
- name: Build
run: docker run -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:armv7-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
run: |
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:armv7-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
- name: Package Release
run: tar czf subconverter_armv7.tar.gz subconverter

Expand All @@ -100,13 +102,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v2
- name: Add commit id into version
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
run: SHA=$(git rev-parse --short HEAD) && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h
- name: Build
run: docker run -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:aarch64-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
run: |
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:aarch64-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
- name: Package Release
run: tar czf subconverter_aarch64.tar.gz subconverter

Expand All @@ -129,13 +133,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v2
- name: Add commit id into version
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
run: SHA=$(git rev-parse --short HEAD) && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h
- name: Build
run: docker run -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:armhf-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
run: |
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -v $GITHUB_WORKSPACE:/root/workdir multiarch/alpine:armhf-latest-stable /bin/sh -c "apk add bash git nodejs npm && cd /root/workdir && chmod +x scripts/build.alpine.release.sh && bash scripts/build.alpine.release.sh"
- name: Package Release
run: tar czf subconverter_armhf.tar.gz subconverter

Expand Down
21 changes: 13 additions & 8 deletions src/generator/config/subexport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,14 +226,7 @@ proxyToClash(std::vector<Proxy> &nodes, YAML::Node &yamlnode, const ProxyGroupCo
singleproxy["name"] = remark;
singleproxy["server"] = x.Hostname;
singleproxy["port"] = x.Port;
if (!x.PublicKey.empty()){
singleproxy["reality-opts"]["public-key"] = x.PublicKey;
if (!x.ShortId.empty())
singleproxy["reality-opts"]["short-id"] = x.ShortId;
}
singleproxy["client-fingerprint"] = "chrome";
if (!x.Fingerprint.empty())
singleproxy["client-fingerprint"] = x.Fingerprint;

switch (x.Type) {
case ProxyType::Shadowsocks:
//latest clash core removed support for chacha20 encryption
Expand Down Expand Up @@ -342,11 +335,23 @@ proxyToClash(std::vector<Proxy> &nodes, YAML::Node &yamlnode, const ProxyGroupCo
singleproxy["alpn"].push_back(x.Alpn);
if (!x.OBFSParam.empty())
singleproxy["obfs"] = x.OBFSParam;
if (!x.MPort.empty()) {
singleproxy["ports"] = x.MPort;
singleproxy.remove("port");
};
break;
case ProxyType::VLESS:
singleproxy["type"] = "vless";
singleproxy["uuid"] = x.UserId;
singleproxy["tls"] = x.TLSSecure;
singleproxy["client-fingerprint"] = "chrome";
if (!x.Fingerprint.empty())
singleproxy["client-fingerprint"] = x.Fingerprint;
if (!x.PublicKey.empty()){
singleproxy["reality-opts"]["public-key"] = x.PublicKey;
if (!x.ShortId.empty())
singleproxy["reality-opts"]["short-id"] = x.ShortId;
}
if (!tfo.is_undef())
singleproxy["tfo"] = tfo.get();
if (xudp && udp)
Expand Down
1 change: 1 addition & 0 deletions src/parser/config/proxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ struct Proxy
String UpMbps;
String DownMbps;
String Insecure;
String MPort;

String Fingerprint;
String PublicKey;
Expand Down
8 changes: 5 additions & 3 deletions src/parser/subparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,12 @@ void vmessConstruct(Proxy &node, const std::string &group, const std::string &re
}
}

void hysteriaConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &add, const std::string &port, const std::string &type, const std::string &auth, const std::string &host, const std::string &up, const std::string &down, const std::string &alpn, const std::string &obfsParam, const std::string &insecure ,tribool udp, tribool tfo, tribool scv, tribool tls13)
void hysteriaConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &add, const std::string &port, const std::string &type, const std::string &auth, const std::string &host, const std::string &mport, const std::string &up, const std::string &down, const std::string &alpn, const std::string &obfsParam, const std::string &insecure ,tribool udp, tribool tfo, tribool scv, tribool tls13)
{
commonConstruct(node, ProxyType::Hysteria, group, remarks, add, port, udp, tfo, scv, tls13);
node.Auth = auth;
node.Host = (host.empty() && !isIPv4(add) && !isIPv6(add)) ? add.data() : trim(host);
node.MPort = mport;
node.UpMbps = up;
node.DownMbps = down;
node.Alpn = alpn;
Expand Down Expand Up @@ -1289,7 +1290,7 @@ void explodeStdVMess(std::string vmess, Proxy &node)

void explodeStdHysteria(std::string hysteria, Proxy &node)
{
std::string add, port, type, auth, host, insecure, up, down, alpn, obfsParam, remarks;
std::string add, port, type, auth, host, mport, insecure, up, down, alpn, obfsParam, remarks;
std::string addition;
hysteria = hysteria.substr(11);
string_size pos;
Expand All @@ -1306,6 +1307,7 @@ void explodeStdHysteria(std::string hysteria, Proxy &node)
type = getUrlArg(addition,"protocol");
auth = getUrlArg(addition,"auth");
host = getUrlArg(addition,"peer");
mport = getUrlArg(addition,"mport");
insecure = getUrlArg(addition, "insecure");
up = getUrlArg(addition,"upmbps");
down = getUrlArg(addition,"downmbps");
Expand All @@ -1315,7 +1317,7 @@ void explodeStdHysteria(std::string hysteria, Proxy &node)
if(remarks.empty())
remarks = add + ":" + port;

hysteriaConstruct(node, HYSTERIA_DEFAULT_GROUP, remarks, add, port, type, auth, host, up, down, alpn, obfsParam, insecure);
hysteriaConstruct(node, HYSTERIA_DEFAULT_GROUP, remarks, add, port, type, auth, host, mport, up, down, alpn, obfsParam, insecure);
return;
}

Expand Down
2 changes: 1 addition & 1 deletion src/parser/subparser.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ enum class ConfType
Local
};

void hysteriaConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &add, const std::string &port, const std::string &type, const std::string &auth, const std::string &host, const std::string &up, const std::string &down, const std::string &alpn, const std::string &obfsParam, const std::string &insecure ,tribool udp = tribool(), tribool tfo = tribool(), tribool scv = tribool(), tribool tls13 = tribool());
void hysteriaConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &add, const std::string &port, const std::string &type, const std::string &auth, const std::string &host, const std::string &mport, const std::string &up, const std::string &down, const std::string &alpn, const std::string &obfsParam, const std::string &insecure ,tribool udp = tribool(), tribool tfo = tribool(), tribool scv = tribool(), tribool tls13 = tribool());
void vmessConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &add, const std::string &port, const std::string &type, const std::string &id, const std::string &aid, const std::string &net, const std::string &cipher, const std::string &path, const std::string &host, const std::string &edge, const std::string &tls, const std::string &sni, const std::string &alpn, tribool udp = tribool(), tribool tfo = tribool(), tribool scv = tribool(), tribool tls13 = tribool());
void vlessConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &add, const std::string &port, const std::string &type, const std::string &id, const std::string &aid, const std::string &net, const std::string &cipher, const std::string &flow, const std::string &mode, const std::string &path, const std::string &host, const std::string &edge, const std::string &tls,const std::string &pkd, const std::string &sid, const std::string &fp, tribool udp = tribool(), tribool tfo = tribool(), tribool scv = tribool(), tribool tls13 = tribool());
void ssrConstruct(Proxy &node, const std::string &group, const std::string &remarks, const std::string &server, const std::string &port, const std::string &protocol, const std::string &method, const std::string &obfs, const std::string &password, const std::string &obfsparam, const std::string &protoparam, tribool udp = tribool(), tribool tfo = tribool(), tribool scv = tribool());
Expand Down