搭建公网临时文件服务
2023-10-12 本文已影响0人
2016晓
如果打算在手机上看一些视频、文档,但手机的存储空间不足时,可以使用本文的思路搭建文件服务。在手机上,通过互联网在线观看。
1、本地开启静态文件服务。如:使用node
var express = require('express');
var app = express();
const path = require('path');
app.use('/static',express.static(path.join(__dirname,'static')));
app.get('/', function (req, res) {
res.send({
name:'asdf',
age:19
})
});
var server = app.listen(27890, function () {
var host = server.address().address;
var port = server.address().port;
// 服务器IP地址为127.0.0.1 端口为8888
console.log( "server is running"+host+port);
});
2、打开在线ide( https://ide.aliyun.com/ ),下载&启动v2ray服务端、frp服务端。v2ray配置内容:(v2ray协议需要设置为websocket)。
{
"log": {
"loglevel": "warning"
},
"inbounds": [{
"port": 28089,
"listen": "0.0.0.0",
"tag": "ws-inbound",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "b831381d-6324-4d53-ad4f-7cda68b30851", // 用户 ID,
"alterId": 0
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/off"
}
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {},
"tag": "direct"
}]
}
image.png
image.png
3、将v2ray服务端口设置为公开。
image.png
4、本地安装&启动v2ray客户端,配置服务端为以上
image.png
5、使用golang编写&运行如下程序:(监听本地17001端口,将请求通过本地1080端口sock代理,转发至ide服务器7001端口。端口号按实际修改)
package main
import (
"io"
"net"
"time"
"golang.org/x/net/proxy"
"github.com/sirupsen/logrus"
)
func main() {
//监听
listener, err := net.Listen("tcp", "0.0.0.0:17001")
if err != nil {
logrus.Errorf("[%s] failed to listen at %s", "rule.Name", "rule.Listen")
return
}
logrus.Infof("[%s] listing at %s", "rule.Name", "rule.Listen")
for {
//处理客户端连接
conn, err := listener.Accept()
if err != nil {
logrus.Errorf("[%s] failed to accept at %s", "rule.Name", "rule.Listen")
time.Sleep(time.Second * 1)
continue
}
go handleRegexp(conn)
}
}
func handleRegexp(conn net.Conn) {
defer conn.Close()
//正则模式下需要客户端的第一个数据包判断特征,所以需要设置一个超时
conn.SetReadDeadline(time.Now().Add(time.Millisecond * 10000))
var target net.Conn
dailer, err := proxy.SOCKS5("tcp", "127.0.0.1:1080", nil, proxy.Direct)
if nil != err {
panic(err)
}
target, err = dailer.Dial("tcp", "127.0.0.1:7001")
if target == nil {
logrus.Errorf("[%s] unable to handle connection (%s) because no match target",
"rule.Name", conn.RemoteAddr())
return
}
if nil != err {
panic(err)
}
logrus.Debugf("[%s] handle connection (%s) to target (%s)", "rule.Name", conn.RemoteAddr(), target.RemoteAddr())
//匹配到了,去除掉刚才设定的超时
conn.SetReadDeadline(time.Time{})
defer target.Close()
//io桥
go io.Copy(conn, target)
io.Copy(target, conn)
}
6、本地安装&启动frp客户端。端口号实际修改
[common]
server_addr = 127.0.0.1
server_port = 17001
[static]
type = tcp
local_ip = 127.0.0.1
local_port = 27890
remote_port = 27890
7、将在线ide frps开启的27890端口公开,使用对应网址就能访问静态文件服务了
image.png
image.png