V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cocoking
V2EX  ›  程序员

Windows 下 有什么高效率的端口转发工具(TCP 流量)?

  •  1
     
  •   cocoking · 1 天前 · 1456 次点击

    尝试使用了 Windows 自带的 netsh,转发效率非常低,导致网速非常慢。也尝试了一款叫 NetworkActivAUTAPFv2.2 的应用软件,相对理想,但已经没人维护,会定时弹窗断开连接。

    有什么其他高效软件可以推荐一下的? 主要是转发 TCP 流量

    15 条回复    2021-02-24 17:18:53 +08:00
    xihefeng
        1
    xihefeng   1 天前
    gost
    crab
        2
    crab   1 天前
    netcat?
    hanxiV2EX
        3
    hanxiV2EX   1 天前 via Android
    frp?
    iamwin
        4
    iamwin   1 天前
    nginx?
    jigi330
        5
    jigi330   1 天前
    nginx 或者 caddy 都应该可以
    FreeEx
        6
    FreeEx   1 天前 via iPhone
    Cooky
        7
    Cooky   1 天前
    改自带防火墙规则?
    laminux29
        8
    laminux29   1 天前   ❤️ 1
    你踩坑了。

    这问题的本质是,网络协议非常复杂,能实现大部分网络特性,并且 bug 少、维护情况好的软件,大多数都在 linux 的服务器应用上,比如大家推荐的 nginx 。

    Windows 的 netsh 、route 等,因为用的人太少,甚至连基本功能的实现都有问题,更别提稳定性。

    所以,网络应用,建议用 Linux + nginx 。
    44670
        10
    44670   1 天前
    44670
        11
    44670   1 天前
    EDIT:上面的似乎不行,也许可以试试这个看看:
    ragnaroks
        12
    ragnaroks   1 天前
    v2ray,gost,port-forwarder 3 个 CLI,在 github 上都有
    port mapper 这个 GUI 的,只能在下载站找到
    march1993
        13
    march1993   20 小时 37 分钟前
    goang 自己写一个?

    ```golang
    package main

    import (
    "fmt"
    "net"
    "os"
    "io"
    "time"
    "os/signal"
    "syscall"
    )

    type Config struct {
    ListenAddr string
    ForwardAddr string
    }

    var configs []*Config = []*Config{
    // {ListenAddr: ":1995", ForwardAddr: "1.2.3.4:199"},
    // {ListenAddr: ":8081", ForwardAddr: "5.6.7.8:8081"},
    // {ListenAddr: ":2222", ForwardAddr: "9.10.11.12:22"},
    {ListenAddr: ":8081", ForwardAddr: "192.168.1.10:30000"},
    }

    func worker(c *Config) {
    fmt.Println("forwarding", c.ListenAddr, " to", c.ForwardAddr)
    if l, err := net.Listen("tcp", c.ListenAddr); nil != err {
    panic(err)
    } else {
    defer l.Close()
    for {
    if left, err := l.Accept(); nil != err {
    fmt.Println("listen: accept error: ", err.Error())
    continue
    } else {
    if right, err := net.Dial("tcp", c.ForwardAddr); nil != err {
    fmt.Println("listen: dial error:", err.Error())
    left.Close()
    } else {
    go Relay(left, right)
    }
    }
    }
    }
    }

    func main() {
    c := make(chan os.Signal)
    signal.Notify(c, os.Interrupt, syscall.SIGTERM)

    for _, config := range configs {
    go worker(config)
    }

    _ = <-c
    }

    func Relay(left, right net.Conn) (int64, int64, error) {
    type res struct {
    N int64
    Err error
    }
    ch := make(chan res)

    go func() {
    n, err := io.Copy(right, left)
    right.SetDeadline(time.Now()) // wake up the other goroutine blocking on right
    left.SetDeadline(time.Now()) // wake up the other goroutine blocking on left
    ch <- res{n, err}
    }()

    n, err := io.Copy(left, right)
    right.SetDeadline(time.Now()) // wake up the other goroutine blocking on right
    left.SetDeadline(time.Now()) // wake up the other goroutine blocking on left
    rs := <-ch

    if err == nil {
    err = rs.Err
    }
    return n, rs.N, err
    }
    ```
    zhangzewa
        14
    zhangzewa   19 小时 8 分钟前
    nps
    cocoking
        15
    cocoking   17 小时 26 分钟前
    @xihefeng 实测 gost 在 Windows 下的转发效率并不高,单线程最高也仅仅在 65M 左右。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   5149 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 17ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    ♥ Do have faith in what you're doing.