• Stars
    star
    272
  • Rank 151,235 (Top 3 %)
  • Language
    Go
  • Created over 3 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

将TCP/UDP放到WebSocket中传输(就能走CDN)基于ws的内网穿透 隧道代理 tcp2ws 全平台0依赖

Tcp over WebSocket (TCP to WebSocket, tcp2ws)

本工具能 使用WebSocket创建隧道,实现TCP端口转发
在v6.0及以后的版本支持了wss,也就是说现在可以实现https ssl进行更安全的传输 在v8.3及以后的版本支持了ip优选,会自动选择域名解析中最优的cdn ip进行连接
在v9.0及以后的版本支持了UDP,也就是说现在可以实现UDP端口转发了
也就是UDP over WebSocket (UDP to WebSocket, udp2ws) 并没有独立成新程序,写在一起了
启动时会同时转发指定的端口的TCP和UDP流量

因为经常修改优化,所以请Star,不要Fork

至于这样脱裤子放屁的操作有什么用?

举个例子,一个服务器只能通过cdn的http转发(或者https),它也不能联网,这时你就可以利用此工具将需要转发的端口(比如22)转换成ws协议(http)来传输,再去Nginx里面配一个反向代理,那么当本客户端访问Nginx提供的服务的特定路径时将反代到本服务端,实现内网穿透进行端口转发
当然Nginx不是必须的,直接把监听端口开放到公网上也行 这时防火墙仅仅发现你连接了一个WebSocket而已 并且在网络不稳定时,断开的ws会自动重连,保持着转发的tcp连接(断开ws超过2分钟tcp连接将被断开)

似乎有别的工具也能实类似的功能,写它干嘛?

最初为了实现将ssh用Nginx转发,写的时候还没找到这种工具,所以先实现了tcp放到ws中传输,但像Nginx就算是ws长链接,根据官方文档描述,连接超时时间无论配置多大,通常都不能连接超过75秒,时间一到ssh就会断,于是实现了重连和重发,这是别的工具没有的
这个工具也不会有太多花里胡哨的功能,干好它的本职工作

那为什么要支持UDP呢?

UDP是不可靠的,所以在传输过程中可能会丢包,但是这个工具会自动重传丢失的数据包
例如用做Dns转发,WebSocket会在客户端发送UDP数据包时才创建连接,并且在2分钟超时后自动断开,既保证了连接稳定性,又不会一直挂着连接占用资源

如何使用

在右边Releases中选择你使用的平台的程序来运行
服务端:
tcp2ws 要代理的ip:端口 本ws服务的监听端口
tcp2ws 本地端口 本ws服务的监听端口
tcp2ws 本地端口 监听ip:本ws服务的监听端口
客户端:
tcp2ws ws://链接 本地监听端口
tcp2ws http://链接 本地监听端口

另外也可以使用wss(https ssl)协议,ssl更为安全,但需要消耗更多流量,需要指定证书路径,另外顺带提一下nginx可以把wss(https)转发到ws(http)
服务端:
tcp2ws 要代理的ip:端口 本ws服务的监听端口 证书.crt 证书.key tcp2ws 本地端口 本ws服务的监听端口 证书.crt 证书.key
tcp2ws 本地端口 监听ip:本ws服务的监听端口 证书.crt 证书.key
使用默认的文件名 server.crt server.key(这里的wss也可以是httpsssl
tcp2ws 要代理的ip:端口 本ws服务的监听端口 wss
客户端:
tcp2ws wss://链接 本地监听端口
tcp2ws https://链接 本地监听端口

生成自签证书的方法(一路回车即可):

openssl genrsa -out server.key 2048
openssl ecparam -genkey -name secp384r1 -out server.key
openssl req -new -x509 -sha256 -key server.key -out server.crt -days 36500

举个🌰:
在服务器运行tcp2ws 127.0.0.1:22 127.0.0.1:22222
然后在nginx中反代了一下
在客户端运行tcp2ws ws://yourdomain.com/ssh/ 222
那么就可以通过客户端的222来访问服务器的ssh啦
是不是特别棒呢

还可以写一个死循环来守护运行 while true;do;tcp2ws 127.0.0.1:22 127.0.0.1:22222;done
或者用screen来后台运行
screen -dmS tcp2ws bash -c "tcp2ws 127.0.0.1:22 127.0.0.1:22222"

速度

在乞丐版M1 Pro的macOS下使用本工具来回转换iperf3端口测试得到的数据

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   988 MBytes  8.28 Gbits/sec
[  5]   1.00-2.00   sec   977 MBytes  8.19 Gbits/sec
[  5]   2.00-3.00   sec   982 MBytes  8.23 Gbits/sec
[  5]   3.00-4.00   sec   994 MBytes  8.34 Gbits/sec
[  5]   4.00-5.00   sec   966 MBytes  8.10 Gbits/sec
[  5]   5.00-6.00   sec   982 MBytes  8.24 Gbits/sec
[  5]   6.00-7.00   sec   989 MBytes  8.30 Gbits/sec
[  5]   7.00-8.00   sec   935 MBytes  7.84 Gbits/sec
[  5]   8.00-9.00   sec  1004 MBytes  8.42 Gbits/sec
[  5]   9.00-10.00  sec   984 MBytes  8.26 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  9.57 GBytes  8.22 Gbits/sec                  sender
[  5]   0.00-10.00  sec  9.56 GBytes  8.21 Gbits/sec                  receiver

走wss,因为ssl,速度肉眼可见下降:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  7.38 GBytes  6.34 Gbits/sec                  sender
[  5]   0.00-10.00  sec  7.38 GBytes  6.33 Gbits/sec                  receiver

直连

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   119 GBytes   102 Gbits/sec                  sender
[  5]   0.00-10.00  sec   119 GBytes   102 Gbits/sec                  receiver

在i7-8550u的Windows下使用本工具来回转换iperf3端口测试得到的数据

[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   300 MBytes  2.52 Gbits/sec
[  4]   1.00-2.00   sec   336 MBytes  2.81 Gbits/sec
[  4]   2.00-3.00   sec   320 MBytes  2.68 Gbits/sec
[  4]   3.00-4.00   sec   317 MBytes  2.66 Gbits/sec
[  4]   4.00-5.00   sec   302 MBytes  2.53 Gbits/sec
[  4]   5.00-6.00   sec   328 MBytes  2.75 Gbits/sec
[  4]   6.00-7.00   sec   312 MBytes  2.61 Gbits/sec
[  4]   7.00-8.00   sec   319 MBytes  2.67 Gbits/sec
[  4]   8.00-9.00   sec   322 MBytes  2.70 Gbits/sec
[  4]   9.00-10.00  sec   348 MBytes  2.92 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  3.14 GBytes  2.70 Gbits/sec                  sender
[  4]   0.00-10.00  sec  3.13 GBytes  2.69 Gbits/sec                  receiver

两个iperf3直连

[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  9.53 GBytes  8.19 Gbits/sec                  sender
[  4]   0.00-10.00  sec  9.53 GBytes  8.19 Gbits/sec                  receiver

伪装

在直接访问监听端口的任意路径,默认会返回一个空白页面
可以写一个index.html放到运行目录下来代替这个空白页面 直接访问时就会显示这个文件的内容,伪装成一个非常普通的Web服务
推荐用一个叫SingleFile的插件可以把页面直接存成一个文件

More Repositories

1

httpRandomMusic

让小爱音箱播放局域网NAS上的音乐
Python
169
star
2

dingBle

esp32修改蓝牙mac地址 模拟蓝牙打卡机
C++
94
star
3

cloudflare-api-v4-ddns

cloudflare 一键 ddns 脚本 (大陆可用)
Shell
91
star
4

make_lrc_music_m3u

网抑云音乐歌单同步 导出播放列表 Cloud music playlist sync
Python
29
star
5

fixBadDisk

一键 u盘/内存卡/硬盘 坏块屏蔽工具 防作弊测速工具
Python
26
star
6

mecopy

咩复制 自动压缩剪贴板大图片 专治QQ微信“过大图片将转换成文件发送” 不降低分辨率
Go
22
star
7

Lenovo-M710q-QNCT-DW1560-Hackintosh

联想M710q 魔改QNCT 博通DW1560 (94352z) 黑苹果 OpenCore 引导
22
star
8

wd40

清滑大学(清华大学)开源镜像 愚人节彩蛋 指南
21
star
9

usb2lcd

Sparkle USB2LCD (LCD2USB) lcd1602 tiny85 digispark
Python
15
star
10

esp32-st7789v-ft6236u-arduino

1.3inch 240x240 LVGL Arduino PlatormIO
C
12
star
11

workdayAlarmClockAndroid

工作咩闹钟 workdayAlarmClockGo的Android服务端 用于播放声音 因为Android下没有像sox那样的命令行播放器 兼命令行音乐播放器
Kotlin
12
star
12

meUiharu-miBand7-Watchface

小米手环7 显示秒 亮度调节 MFA/2FA/TOTP两步验证 日历 随机骰子🎲 咩咩的初春饰利 照片表盘
12
star
13

cloudMusicDlna

网易云歌单dlna推送 play CloudMusic on dlna player
Python
11
star
14

me433IR

咩射频 315/433Mhz射频与红外互转 最便宜的小爱音响射频模块
C++
10
star
15

githubBackup

备份Github所有仓库(包括私仓)纯shell实现
Shell
10
star
16

daKuaiTou

喜羊羊 大块头 Esp32-Cam Web遥控视频小车
HTML
9
star
17

workdayAlarmClockGo

工作咩闹钟 使用 Golang 重构的 工作日闹钟 服务端 社畜的一天从美好的音乐开始 每天不同的闹钟铃声 全平台兼容包括Android
Go
9
star
18

meBackup

(开发中)咩备份 将Android数据备份到任意SSH服务端 基于YAWAsau/backup_script修改
Shell
8
star
19

dingAP

小锤锤锤钉钉
C++
7
star
20

png2heic

自动转换图片到heic或webp 依赖ffmpeg mp4box exiftool
Python
6
star
21

windows-fonts

Windows Fonts Backup zh_CN Windows系统自带中文字体,可用于补全Wine字体缺失,除了mingliub.ttc这个不常用的太大无法上传
5
star
22

espBadUSB-Plus

esp usb 的i2c通信版本 功能更完善的wifi usb hid攻击器
C++
5
star
23

miLightSg90

咩咩房间的灯sg90舵机控制器 HomeKit 小爱 关灯神器
C++
5
star
24

3dLcd2Usb

使用3D打印机通用的LCD2004面板(老王店的)的LCD2USB arduino pro mini
Go
5
star
25

zanjie1999

5
star
26

kindle-vnc

kual插件 vnc服务与客户端 吊打某奸商 依赖kterm
Lua
5
star
27

weiboToPrivate

微博批量转仅自己可见
JavaScript
4
star
28

blvFfmpegConcat

bilibili哔哩哔哩(Android)缓存合并
Python
4
star
29

make_m3u

网易云音乐m3u播放列表生成器 另外附上一个ubuntu18能跑的网易云
Python
4
star
30

HP-Clover

惠普envy13 8代处理器 & 惠普 光影精灵2 pro 7代处理器
3
star
31

bleLock

Windows系统的蓝牙锁(像小米感应钥匙)支持任意可扫描蓝牙设备
Go
2
star
32

tomcat-redis-session-manager-help

nginx负载均衡转发tomcat
Nginx
2
star
33

MeHttpPush

Typecho 新评论推送 reCAPTCHA自动提交 支持Server酱,Bark,Telegram等使用HTTP的推送api
PHP
2
star
34

esp32WebCam

esp-cam web camera
C
2
star
35

esp32-cam-rtsp

esp32-cam rtsp 服务
C++
2
star
36

arduino-esp32s2

esp32-s2 for Arduino
C
1
star
37

lgt8f328-pio

Logic Green (LGT) boards support for Platfrom IO
C
1
star
38

kindle-mplayer-cloudmusic

在kindle上使用otg接usb声卡播放网易云歌单的内容
Python
1
star
39

lede-vpod

lede for Vpod HOLL M1
C
1
star
40

espBadUSB

在线编辑 web服务器 WiFi Ducky 使用 ESP8266 + ATMEGA32U4
HTML
1
star
41

redpill-loader-action

群辉dsm7引导918
Shell
1
star
42

showArgvSocket

绕过堡垒机对ssh软件的限制
Python
1
star
43

redpill-tool-chain

群辉dsm7引导3615
Shell
1
star
44

ctrl-pad

咩咩房间的控制屏幕
Vue
1
star
45

bvav

哔哩哔哩av号BV号互转
HTML
1
star
46

steam-auth-js

steam令牌js实现
JavaScript
1
star
47

espMp3Player

软解音频的测试代码
C++
1
star
48

HidpiFix

解决gpd pocket2 各种hidpi奇怪问题
Shell
1
star
49

metime

咩时间
Kotlin
1
star
50

biliHaokanCheck

检查哔哩哔哩用户在好看视频中被盗的视频
Python
1
star
51

Sparkle-PE

带有线无线网卡声卡驱动 Chrome 支持smb网络共享 运行环境齐全的 WIn PE 维护盘
1
star