通过WebSocket隧道,尝试将ASP.NET网站空间当作VPS来使用
作者:V君 发布于:2021-1-17 11:50 Sunday 分类:折腾手记
先上 PoC源代码 再开始扯,这次不是着重解决某个问题,而是尝试确定某种可能性。
以前使用过 C9.io 提供的免费在线开发环境来搞各种事情,包括正常上网,无非是利用 Web Sockets 建立隧道,然后配合客户端连接到在上面运行各种应用程序。
现在C9已经被收购且停止免费了,那就公开来说吧w
这次也不例外,只不过花了点钱搞了个支持 ASP.NET 4.5+ 的网站空间,然后在上面搞类似的事情。
基础设施 -- WebSocket 转 TCP 模块
首先要使用 WebSocket 来建立一条隧道,要求网站空间支持且启用 WebSocket,不然没法整。这里有个未经优化,但还能凑合着用的例子,只要挂在 HttpModule 中 HttpApplication 的 PostMapRequestHandler 事件,填好参数就能吃。
折腾1 -- SSH 终端
略去寻找绿色 SSH 服务端的辛酸过程,时间直接转到发现 FxSsh 这个纯托管实现的服务端。这里要分成两个部分来扯,分别是使用基于 ConPTY 的 MiniTerm 和兼容低版本 Windows 的简单兼容实现。由于 FxSsh 主要实现的是 SSH 协议通道,服务端的终端并没有适配,尽管源代码中带了个名为 MiniTerm 的 DEMO 来适配到较新系统的 ConPTY。
第一部分:基于 MiniTerm 的实现。原版的 MiniTerm 虽然导入了 ResizePseudoConsole 这个 API 但并没有使用。而且由于 NuGet 上的 FxSsh 不是最新版,没有窗口大小变更事件的支持。 因此我把他们全都拷贝到自己的项目中并注明来源了。在此之上再加以修改 MiniTerm 使窗口大小变更事件适配到 MiniTerm 的实现。目前并没有发现太多问题。有点小遗憾的是 MiniTerm 使用的 ConPTY 功能是 Windows 10 近些年的更新才引入的,因此许多网站空间的系统都不支持,会报「在 kernel32 中找不到 CreatePseudoConsole 入口」的错误,因此我准备了另一个方案,见接下来的第二部分。
第二部分:另行实现一个兼容低版本 Windows 的控制台进程适配。在项目中起名为 EasyTerminal。起初简单将控制台进程的标准输入输出还有错误输出重定向到 SSH 通道,然鹅,回车键不起作用,而且不回显。将回车键拦截下来,改成 StandardInput.WriteLine 调用,总算是能满足最基本的需求。尽管还是没有实时回显,得按下回车键之后才显示出来,功能按键和窗口大小什么的更无从说起。目前仍在使用零碎的时间持续摸索(咕XD)…
折腾2 -- 正常上网 将网站空间当作 V2 服务端使用
编译部署这个项目,然后将 V2 的两个 exe 和配置文件丢进 App_Data 目录,然后使用 WS 隧道连接到监听的 URL,最后在 V2 客户端指向 WS 隧道客户端,这时候就能吃了。分配了较大的缓冲区大小,这应该能有效减少损耗,如果网速慢,你需要测一下空间到你的网速。
不水。
标签: 软件开发 个人服务器 C# HTTP Web技术 传输协议 Windows .NET IIS WebSocket
在Windows上手动装配MySQL,绿色运行和注册成Windows服务
作者:V君 发布于:2020-5-21 18:04 Thursday 分类:应用软件
前言:在网上 MySQL 的安装、配置教程遍地都是,但似乎没有把多种姿势的放一块儿的,那就把自己整理的文档发表出来吧!(也方便以后自己翻查←这才是主要目的
这次依然从 TL; DR开始
- 下载 MySQL 的 zip 包
- 解压、试运行检查依赖
- 撰写配置文件、初始化数据库目录、绿色运行
- 将 MySQL 实例注册成 Windows 服务
- 配置 root 远程访问权限
列完 TL;DR 之后就是展开每一步了
- 下载 MySQL 的 zip 包
MySQL 的 zip 包官方下载地址为:https://dev.mysql.com/downloads/mysql/。 本文在撰写时版本为 8.0.20
- 解压、试运行检查依赖
本例解压到的目录为 Z:\My_\Home ,解压之后首先尝试双击 bin 目录中的 mysql.exe 看看有没有弹出缺少DLL的提示。若缺少依赖可能会弹出 VCRUNTIMExxx.dll,这就需要去找对应的 redist 安装才能解决。
- 撰写配置文件、初始化数据库目录、绿色运行
现在可以以多种姿势来使用 MySQL 了,分别是单实例、多实例;绿色、服务,横竖各切一刀分成4种。单实例顾名思义就是把数据放进 MySQL 主目录,使其能够方便移动。多实例就有点像微软 SqlServer,用不同的参数指定数据目录,启动多个进程来实现。绿色就是可以放进U盘,双击就能启动。服务则是注册成 Windows 服务,能够让其随着系统开机而启动。
让我们从单实例绿色开始吧。在 Home 旁边新建一个文件夹,本例 GreenSingleton 完整路径为 Z:\My_\GreenSingleton。然后把刚才解压到 Home 的东西复制过去。打开命令提示符导航到这里,执行
bin\mysqld.exe --initialize-insecure --default_authentication_plugin=mysql_native_password
然后 data 目录就出来了,用户名 root 密码为空。接下来是启动服务端,就地执行
bin\mysqld.exe --port=3307 --bind-address=127.0.0.1
其中和绑定地址是可选的,它们都有默认值。执行起来之后不会有任何输出,服务端已经在运行了,我们可以用管理工具连接到上面去开始使用。最后就是停止服务端了,打开一个新的命令提示符,执行
bin\mysqladmin.exe -u root shutdown
就能安全地停止服务端。如果有密码则需要加上 -p 参数来输入密码,如果服务端指定了端口可以用 --port=3307 参数指定,如果服务端不在本机可以用 --host==127.0.0.1 来远程连接。可以把这两个命令存到 bat 文件来方便执行,但要注意执行目录。
接下来是绿色多实例。让我们回到 Z:\My_ ,现在已经和单例绿色没关系了,把它放置到一边 XD。创建第一个实例目录,本例第一个实例目录为 Inst-1 完整路径 Z:\My_\Inst-1 ,在里面创建 my.ini 用 Notepad++ 之类的文本编辑器打开,系统自带的记事本会追加 BOM 头,会使服务端无法启动。本例第一个实例的配置文件:
[mysqld]
bind-address=0.0.0.0
# 设置3306端口
port=3306
#skip-name-resolve
# 设置mysql数据库的数据的存放目录
datadir=Z:\My_\Inst-1\Data
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
接下来是初始化数据目录,回到命令提示符,执行
bin\mysqld.exe --defaults-file=Z:\My_\Inst-1\my.ini --initialize-insecure
然后启动服务端,在命令提示符执行
bin\mysqld.exe --defaults-file=Z:\My_\Inst-1\my.ini
停止服务和单实例一样,若要创建第二个实例,只需要复制一份配置文件,修改配置中的路径和命令行参数的路径就可以了。
- 将 MySQL 实例注册成 Windows 服务
执行以下命令就能在服务管理器中刷出,可以设置开机启动了。
bin\mysqld.exe --install MySqlInst-1 --defaults-file=Z:\My_\Inst-1\my.ini
要移除服务则执行以下命令。
sc delete MySqlInst-1
- 配置 root 远程访问权限
使用管理工具或者命令行客户端执行以下 SQL 语句
CREATE USER 'root'@'%' IDENTIFIED BY 'foobar';
GRANT ALL ON *.* TO 'root'@'%';
若需环境中没有管理工具,则可以使用 MySQL 自带的命令行客户端,以下常见的用法。
bin\mysql --port=3306 --user=root
bin\mysql --port=3307 --user=root -p
bin\mysql --port=3308 --user=root -p --host=127.0.0.1
在树梅派Raspbian上将Gogs安装到Systemd
作者:V君 发布于:2019-6-16 18:52 Sunday 分类:折腾手记
TL:DR- 从官方网站下载压缩包并解压到 /opt/gogs
- 修改 /opt/gogs/scripts/systemd/gogs.service 配置各种路径
- 将 /opt/gogs/scripts/systemd/gogs.service 复制或创建符号连接到 /etc/systemd/system/
- 执行 sudo systemctl enable gogs
- 执行 sudo systemctl start gogs
- 此时服务已经启动,访问默认端口,进入安装向导
不扯。
丢掉花生壳吧!自己实现DDNS
作者:V君 发布于:2017-8-27 23:20 Sunday 分类:我的应用
TL;DR
[源代码] 按需修改,尚未提供直接可用的二进制版本
效果:自动将当前IP地址更新到指定DNS记录,并持续监视确保同步。
用法:
首次启动应用程序会自动创建数据库,然后因未填入配置而停止运行。
在数据库填入配置并重新运行即可。
加参数 --no-enter 可以禁用回车键退出,方便linux开机自启动和nohup后台运行。
限制:
目前只实现了 GoDaddy 的域名 API,且需要一个获取当前IP的途径,
因此没有直接可用的二进制版本。
环境:需要.NET 4.5,兼容 mono
不吐不快!
虽然早就知道各种实名制要求的政策出来了,但是没有影响就一直无视。
直到花生壳帐号一个个挂掉,最后到本博客的花生壳也不幸遭到屏蔽,
去花生壳实名认证发现要上传身份证照片以及手持纸条的照片,泥马,这就像x贷一样哇!
如果只是绑定手机号,给你就给你吧,要求不能太过分,再见花生壳!
找别的法子实现 DDNS 吧!
首先想到的是三方DDNS,
比如不存在的 dyndns 啦、无缘无故封帐号的 afraid 啦、没用过的 2233 拉。
纠结这些不靠谱的东西时,灵光一闪:
如果直接把IP通过域名提供商的API捅进去,是不是可以把DDNS搞定?!
赶紧放狗出去找找看可能性,结果就找到了狗爹的API,很全哇!
于是这个小工具就诞生辣!
解决Mono连接TLS/SSL问题
作者:V君 发布于:2016-3-12 15:00 Saturday 分类:折腾手记
TL;DR - 安装官网最新版可以解决, 参照官网提供的步骤略加改动:
注意: 新版Debian(jessie)使用本方法可能会出现问题, 目前尚未有解, 从Git上抓源代码可编译.
1)导入签名
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \
--recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
2)在 /etc/apt/sources.list 头部追加以下内容
deb http://download.mono-project.com/repo/debian wheezy main
deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main
deb http://download.mono-project.com/repo/debian wheezy-libjpeg62-compat main
#d
eb http://download.mono-project.com/repo/debian wheezy-libtiff-compat main 无armhf
3)更新软件包列表
sudo apt-get update
4)不解释
sudo apt-get install mono-complete libapache2-mod-mono
5)配置apache,略
听我扯扯
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2024年5月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)