标签: portforwarding

NAT端口转发的最佳选择是什么?

我想让用户轻松将NAT上的端口转发到我的C++应用程序的本地机器上.我想在OSX和Windows上做这个工作.Linux将是一个很好的奖励,但Linux用户可能更容易手动转发端口,所以它不是一个问题.LGPL类型代码没问题,但我不能使用任何直接GPL.

我很想听听任何人在这个领域有过的想法或经历,但我想到了一些具体的问题:

  • UPNP是否有公认的最佳图书馆?该MiniUPNP客户端看起来可能会奏效,但还有什么在那里?
  • Bonjour怎么样?我可以将它用于OSX计算机吗?
  • 所有大型的bittorrent应用程序都必须处理这个问题,所以现有的调查是如何进行的吗?Skype怎么样?

tcp bonjour upnp nat portforwarding

7
推荐指数
1
解决办法
1995
查看次数

需要在防火墙后面使用git:尝试ssh隧道

我试图使用ssh端口转发来打败企业防火墙:

ssh git@GIT_SERVER -L9418:GIT_SERVER:9418
Run Code Online (Sandbox Code Playgroud)

在另一个终端我跑

git clone git://localhost:repositories/project.git
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

/Users/aboxer/tmp/glucosia/.git/中初始化的空Git存储库

致命:无法查找localhost(端口存储库)(提供节点名称或服务名称,或未知)

谢谢!

git ssh portforwarding tunnel

7
推荐指数
2
解决办法
1万
查看次数

在Java中快速实现端口转发

我构建了一个打开ServerSocket的简单应用程序,在连接时,它将自身连接到远程计算机上的另一个服务器套接字.为了实现端口转发,我使用两个线程,一个从本地输入流读取并流到远程套接字输出流,反之亦然.

实现感觉有点无法实现,所以我问你是否知道更好的实现策略,或者甚至有一些代码可以以高效的方式实现.

PS:我知道我可以在Linux上使用IPTables,但这必须在Windows上运行.

PPS:如果你发布这个简单任务的实现,我将创建一个基准来测试所有给定的实现.对于许多小型(~100字节)包和稳定数据流,解决方案应该是快速的.

我当前的实现是这样的(在每个方向的两个线程中执行):

public static void route(InputStream inputStream, OutputStream outputStream) throws IOException {
    byte[] buffer = new byte[65536];
    while( true ) {
        // Read one byte to block
        int b = inputStream.read();
        if( b == - 1 ) {
            log.info("No data available anymore. Closing stream.");
            inputStream.close();
            outputStream.close();
            return;
        }
        buffer[0] = (byte)b;
        // Read remaining available bytes
        b = inputStream.read(buffer, 1, Math.min(inputStream.available(), 65535));
        if( b == - 1 ) {
            log.info("No data available anymore. Closing stream.");
            inputStream.close();
            outputStream.close(); …
Run Code Online (Sandbox Code Playgroud)

java portforwarding

7
推荐指数
2
解决办法
2万
查看次数

端口转发(NAT UPNP)错误

我试图使用c#设置端口转发,但我在visual studio中不断收到此错误.

Interop type 'NATUPNPLib.UPnPNATClass' cannot be embedded. Use the applicable interface instead.

这是代码:

NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass();
NATUPNPLib.IStaticPortMappingCollection mappings = upnpnat.StaticPortMappingCollection;
mappings.Add(9099, "UDP", 9099, "192.168.1.101", true, "Local Web Server");
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

我在这里找到了代码.

c# upnp portforwarding

7
推荐指数
1
解决办法
2600
查看次数

如何将wamp服务器联机?

我已经尝试通过路由器端口转发,也禁用了我的防火墙.我还编辑了httpd.conf.我改变了

Listen 80
Run Code Online (Sandbox Code Playgroud)

Listen 8080
Run Code Online (Sandbox Code Playgroud)

我也改变服务器名称由localhost:80<private-ip>:80 i.e 192.168.1.2:80. 最后我改

Order Allow,Deny
Allow from all
Run Code Online (Sandbox Code Playgroud)

在offlineonline标签中.我有DLink DSL-2730U.在高级设置> NAT>外部端口启动8080和结束8080>内部端口启动8080和结束8080>服务器IP我保持为192.168.1.2然后重新启动所有服务,即路由器和wamp.但我仍然无法通过我的公共IP访问wamp,这是59.95.81.56.

wamp wampserver portforwarding

7
推荐指数
1
解决办法
5万
查看次数

允许公共IP通过WebSockets连接

我尝试与nodejs ws(einaros)创建聊天,这是我的代码:

服务器:

var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 80 });
wss.on('connection', function(ws) {
    console.log('connecting count:' + wss.clients.length);
});
Run Code Online (Sandbox Code Playgroud)

客户:

var hostname = location.hostname;
var port = 80;
var url = 'ws://'+hostname+':'+port+'/';
window.WebSocket = window.WebSocket || window.MozWebSocket;
var w = new WebSocket(url);
Run Code Online (Sandbox Code Playgroud)

当我用我的计算机或其他与我的路由器连接的计算机进行测试时,它运行良好.但是,通过Internet访问的其他客户端无法建立连接.当然,他们使用公共IP,如218.xxx.xxx.xxx,而不是192.168.xxx.xxx.

我想知道如何解决这个问题.

谢谢你的回答.但是,这可能不是NAT问题.例如,我的公共IP是218.100.50.50,而我的私有IP是192.168.1.1.当连接来自我的网络外部并访问218.100.50.50:80时,路由器将其重定向到192.168.1.1:80.有一个可以通过这种方式访问​​的网页,但仍然无法连接到我的websocket服务器.这个问题让我很困惑.

networking router portforwarding websocket node.js

7
推荐指数
1
解决办法
4560
查看次数

Docker端口转发无法正常工作

我已经设置了Docker容器来访问我的机器docker容器到本地的另一台机器.

在命令下创建一个容器:

    docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 7000:8000 --net mynetwork --ip 172.11.0.10 --privileged myimagename bash
Run Code Online (Sandbox Code Playgroud)

创建容器详细信息后:

        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES

        1e1e5e9b74b4        myimgaename         "bash"              21 minutes ago      Up 6 minutes        0.0.0.0:7000->8000/tcp   containername
Run Code Online (Sandbox Code Playgroud)

网络细节:

     "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "fe357c54c816fff0f9d642037dc9a173be7f7e42a80776d006572f6a1395969e",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "8000/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "7000"
                }
            ]
        }
Run Code Online (Sandbox Code Playgroud)

如果我在mymachine(hostmachine)访问docker ipaddr(172.11.0.10)或hostname(www.myhost.net)它工作

但是,如果我使用端口访问不起作用:hostmachine ip:192.168.1.1

  go to the browser  192.168.1.1:7000  hostmachine and locally …
Run Code Online (Sandbox Code Playgroud)

portforwarding docker docker-container

7
推荐指数
2
解决办法
3万
查看次数

Nat 穿越:UPnP/IGD 与 NAT-PMP

我正在编写一个 P2P 应用程序,希望避免用户手动设置端口转发。

我有点困惑,因为似乎有两种不同的协议来配置 NAT,UPnP/IGD 和 NAT-PMP。我应该使用哪一个?所有 NAT 都支持它们吗?或者我应该同时支持两者以确保 NAT 至少支持其中之一?

p2p network-programming upnp nat portforwarding

6
推荐指数
2
解决办法
4949
查看次数

SSH远程端口转发空响应

我正在尝试在 Windows 电脑上使用 ssh 从本地网络中的 Raspberry pi 进行远程端口转发

ssh -R 5941:localhost:8000 pi@192.168.1.191
Run Code Online (Sandbox Code Playgroud)

因此,根据上面的命令,我尝试将连接从 Raspberry pi 服务器 (192.168.1.191) 上的端口 5941 转发到我的电脑 (localhost) 上的端口 8000,该电脑在端口 8000 上托管一个 Web 服务器

上面的 ssh 命令执行没有错误,但是当我尝试在 Raspberry Pi (192.168.1.191) 上访问 http://localhost:5941/ 时,我得到

ERR_EMPTY_RESPONSE
Run Code Online (Sandbox Code Playgroud)

我努力了

  1. 关闭了我的 Windows PC 上的防火墙
  2. raspberrypi 上的 netstat 给了我
$ sudo netstat -a | grep 5941
tcp        0      0 0.0.0.0:5941        0.0.0.0:*               LISTEN
tcp6       0      0 [::]:5941               [::]:*                  LISTEN
Run Code Online (Sandbox Code Playgroud)
  1. 当我在详细模式下运行 ssh 命令时, ssh -R 5941:localhost:8000 pi@192.168.1.191 -v 我得到了这个
debug1: Remote connections from LOCALHOST:5941 forwarded …
Run Code Online (Sandbox Code Playgroud)

ssh portforwarding

6
推荐指数
1
解决办法
3097
查看次数

CICD 中的端口转发(Github Actions)

我想在 Github Actions 中运行数据库迁移。数据库位于堡垒后面。

我的解决方案是通过堡垒将 Postgres 端口 5432 转发到数据库主机。

我尝试了下面的脚本,但似乎不起作用。

mkdir ~/.ssh
ssh-keyscan -H <bastion_ip>  >> ~/.ssh/known_hosts
echo "${{secrets.BASTION_SSH_KEY}}" >> key
chmod 600 ./key
ssh -T -i ./key -L 5432:<db_host_url>:5432 user@<bastion_ip> &
make migrate
rm ./key
Run Code Online (Sandbox Code Playgroud)

make migrate针对 运行迁移localhost:5432

当我运行管道时出现以下错误

Error:  AssertionError [ERR_ASSERTION]: ifError got unwanted exception: connect ECONNREFUSED 127.0.0.1:5432
Run Code Online (Sandbox Code Playgroud)

无论如何要修复它吗?我对其他方式持开放态度。

ssh portforwarding github-actions cicd

6
推荐指数
1
解决办法
3737
查看次数