搭建公网临时文件服务

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
上一篇 下一篇

猜你喜欢

热点阅读