Another p2p network library in Go. Committed to direct communication between devices.
[简体中文]
NOTE
Time synchronization between nodes is crucial; the difference should not exceed 10 seconds
# node1
pgcli vpn -s wss://openpg.in/pg -4 100.64.0.1/24
# node2
pgcli vpn -s wss://openpg.in/pg -4 100.64.0.2/24
$ pgmap -l 127.0.0.1:9987 --secret-key 5172554832d76672d1959a5ac63c5ab9 \ --stun 111.206.174.2:3478 --stun 106.13.249.54:3478 --stun 106.12.251.52:3478 --stun 106.12.251.31:3478
$ caddy reverse-proxy --from https://openpg.in --to 127.0.0.1:9987
# share
$ pgcli share -s wss://openpg.in/pg ~/my-show.pptx
ShareURL: pg://DJX2csRurJ3DvKeh63JebVHFDqVhnFjckdVhToAAiPYf/0/my-show.pptx
# download
$ pgcli download -s wss://openpg.in/pg pg://DJX2csRurJ3DvKeh63JebVHFDqVhnFjckdVhToAAiPYf/0/my-show.pptx
ln -sf /usr/sbin/pgcli /usr/sbin/pgvpn
You can now use pgvpn instead of pgcli vpn.
pgvpn --peers
pgvpn -s wss://openpg.in/pg -4 100.64.0.1/24 --proxy-listen 127.0.0.1:4090 --forward tcp://127.0.0.1:80 --forward udp://8.8.8.8:53
PeerGuard supports multiple transport protocols (UDP/QUIC/KCP) with a unified interface, making it easy to switch between them based on your needs.
// Create a UDP listener
config := pgnet.ProtocolConfig{
Network: pgnet.ProtocolUDP,
Addr: "127.0.0.1:9000",
}
listener, err := pgnet.NewListener(config)
// Create a QUIC listener with TLS
config := pgnet.ProtocolConfig{
Network: pgnet.ProtocolQUIC,
Addr: "127.0.0.1:9001",
TLSConfig: tlsConfig,
}
listener, err := pgnet.NewListener(config)
// Create a KCP listener with encryption
config := pgnet.ProtocolConfig{
Network: pgnet.ProtocolKCP,
Addr: "127.0.0.1:9002",
KCPKey: "your-secret-key",
KCPCrypt: "aes",
}
listener, err := pgnet.NewListener(config)
Learn more about protocol usage and configuration in net/protocols.md.
first
$ export PG_SECRET_KEY=5172554832d76672d1959a5ac63c5ab9
$ export PG_SERVER=wss://openpg.in/pg
$ pgcli admin secret --network "<email>" --duration 24h > psns.json
then
sudo pgcli vpn -s wss://openpg.in/pg -4 100.64.0.1/24 -f psns.json
GNU General Public License v3.0
Contributions welcome! Have an improvement? Submit a pull request.
NOTE
I also maintain a closed-source version, and contributions to the open-source project may be included in the closed-source version.