有人有关于如何使用 c++ 将带有 upnp 的端口转发条目添加到路由器的简单示例吗?
我尝试为我的应用程序实现UDP打孔算法.当两个对等方联系服务器显示其公共IP时,3G蜂窝NAT为同一内部UDP端口分配了恒定的外部端口,但是,3G蜂窝NAT 根据目的地改变了内部 - >外部端口映射.
因此,例如,如果C是静态IP服务器,则A-> C映射到端口1234,而A-> B映射到端口5678.这样UDP打孔失败.
由于这些蜂窝NAT使用CGN,因此没有UPnP/NAT-PMP支持.我已经阅读了关于CGN的PCP,其功能与此类似,但是,我没有在PCP上找到任何协议信息.
有没有人知道是否有办法克服这个目标变量端口映射问题?
通过端口转发(如PCP)或遍历(PREFFERED).
最后一件事.有一些概念证明像skype,viber和MOST重要的洪流下载器,如那些依赖于vuze-core(frostwire),可以通过3G和其他蜂窝网络在Android上运行.所以他们显然必须找到解决方案......
提前致谢!
networking udp portforwarding cellular-network nat-traversal
通过 USB 使用 ADB,我注意到端口转发非常慢(~150kB/s),尽管我的:
我正在寻求帮助调试。
我很感激有关如何调查原因的任何想法 - 或者当然,关于如何解决的想法!
通过 USB 运行 ADB,我可以非常快速地下载然后拉取文件,这表明我的互联网连接和 USB 连接是“快速”的(>1MB/s)。例如,我可以在 90 秒内抓取一个 100MB 的文件:
$ cat getfile.sh
R=tempdl
adb shell "curl -k $1 > /sdcard/$R"
adb pull /sdcard/$R
adb shell rm /sdcard/$R
$ ./getfile.sh https://dl.google.com/android/android-sdk_r22.6.2-linux.tgz
Run Code Online (Sandbox Code Playgroud)
这在 90 秒内完成。
但是,如果我尝试使用 adb 端口转发,例如:
adb forward tcp:8000 tcp:8000
... 结合 Android 上的端口转发应用程序(由您选择)来抓取相同的文件,然后我从未看到超过120kB/秒的速度。
当我的互联网连接速度很快并且我的 USB 连接速度很快时,我很想了解为什么端口转发可能会如此缓慢。当然还有关于如何缓解的任何想法。
我设置了一个服务器,我通过 ssh 进入,我在它的 docker 容器中运行 gitlab,并使用子域通过 nginx 将 http 和 https 流量路由到它。这很好用,但我想用 ssh 做一些类似的事情,这样我就可以使用 ssh+git。目前 ssh 在 10022 上暴露给主机,但我不想打开第二个 ssh 端口,我想做的是能够做到这一点:
# To ssh into the server
ssh example.com
# To use ssh+git on gitlab
git clone ssh://git@gitlab.example.com/me/project.git
Run Code Online (Sandbox Code Playgroud)
我猜我想要的是某种方式来检查使用的主机名并转发到适当的内部端口,其方式与 nginx 为 html 流量所做的类似,但我不知道如何开始。这是可能的,如果是,是否有任何指南可以说明如何做到这一点?
我正在尝试创建一个简单的程序,只需单击一下即可打开/转发某些端口,而无需每次都在控制台中进行操作。
好吧,我知道两个不同的项目可以打开端口,第一个叫做“ upnpc”-> http://miniupnp.free.fr/files/,但是必须为每个端口手动完成,第二个则是可以打开的lib在C#-> https://github.com/lontivero/Open.NAT中使用。
第一种方法是创建脚本并使用C#调用它,但我认为这不是一个好主意。
upnpc-shared -a 192.168.1.12 6622 6622 TCP
Run Code Online (Sandbox Code Playgroud)
第二个带有lib的东西,无法弄清为什么不起作用。
这是我的代码,应该打开/转发3个端口,但只有最后一个有效。附言:我认为它一个接一个地打开了端口,但由于某种原因,只有最后一个似乎起作用,其他端口停止了。
public static void Main()
{
OpenPort().Wait();
Console.WriteLine("\nPress any key to exit...");
Console.ReadKey();
}
private static async Task OpenPort()
{
var nat = new NatDiscoverer();
var cts = new CancellationTokenSource(5000);
var device = await nat.DiscoverDeviceAsync(PortMapper.Upnp, cts);
var ip = await device.GetExternalIPAsync();
Console.WriteLine("Your IP: {0}", ip);
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 6622, 6622, 0, "port 6622"));
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 6625, 6625, 0, "port 6625"));
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 6626, …Run Code Online (Sandbox Code Playgroud) 我在我的服务器上将端口 1433 转发到 9082,在防火墙设置为允许入站和出站,在 SQL Server 允许远程打开。
但是,我无法从客户端连接到我的 SQL Server。
我安装了 SQL Server 2012。
与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误:25 - 连接字符串无效)
我第一次使用 AWS 时遇到了尝试设置负载均衡器 (ELB) 的问题。
到目前为止,我已经使用 ECS 创建了 2 个运行容器的 EC2 实例,每个实例都有一个在端口 3000 上侦听的应用程序。
对于每个实例,我都能够浏览到指定端口 3000 的 IPv4 公共 IP 并访问容器化应用程序。我能够按预期登录并使用该应用程序。
所以我认为接下来要做的正确的事情是设置一个 ELB,它不仅可以平衡负载(!),还可以处理端口转发。
ELB 有一个端口 80 侦听器,我有一个目标组,我在端口 3000 上注册了我的 ECS 实例。
然后我将 ELB 的 DNS 名称(即my-load-balancer-123456789.eu-west-1.elb.amazonaws.com)弹出到我的浏览器中,并显示了我的应用程序的登录页面。
一切都很好,直到我真正登录。然后我会看到错误消息:
ERR_TOO_MANY_REDIRECTS:my-load-balancer-123456789.eu-west-1.elb.amazonaws.com 重定向您太多次。
我有2个问题
1:为什么会发生重定向循环?
2:是否有任何我应该知道的诊断工具可以帮助我将来解决此类问题?
更新:顺便说一句,我已经尝试清除所有浏览器 cookie。
任何帮助表示赞赏。
问题
我尝试使用libssh和libssh-C++-wrapper进行本地端口转发。我的目的是通过 SSH 将localhost:3306服务器localhost:3307上的端口转发到我的机器上,以通过 MySQL 连接到localhost:3307.
void ssh_session::forward(){
ssh::Channel channel(this->session);
//remotehost, remoteport, localhost, localport
channel.openForward("localhost",3306,"localhost",3307);
std::cout<< "Channel is " << (channel.isOpen()?"open!":"closed!") << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
withsession在ssh::Channel类型为 的构造函数中ssh::Session。
上面的代码打印Channel is open!. 如果我尝试localhost:3307使用MySQL Connector/C++ 连接,我会得到
错误 2003 (HY000):无法连接到“127.0.0.1”上的 MySQL 服务器 (61)
观察
$ ssh -L 3307:localhost:3306 me@myserver.com一切正常,我可以连接。ssh::Session session在构造函数中使用used 或ssh::Channel channel执行远程 shell 命令,一切正常,因此会话很好! …我有一个 VMWare Player (14.1.2 build-8497320) 在 Windows 10 主机上运行 Ubuntu 18.04 来宾。Ubuntu 来宾有一个 LAMP 堆栈,可以运行一些 Web 应用程序。我正在使用 NAT 将 Ubuntu 来宾连接到 Windows 主机的网络。
我可以通过使用来自我的 Windows 主机的来宾的本地 IP 地址(例如http://192.168.80.128/mediawiki)来访问这些应用程序。但我想从我的 Windows 主机访问它:http://localhost/mediawiki。我认为如果我可以将我的 Ubuntu 来宾的端口 80 转发到 Windows 主机的端口,这应该是可能的。
请问我该如何做到这一点?我无权访问 VMWare Workstation 及其虚拟网络编辑器。
编辑:我可能应该添加想要这样做的动机。基本上,我想避免每次访问 Web 应用程序时都计算出虚拟机的 IP 地址。
(进一步)原因是 Ubuntu 来宾的本地 IP 地址可能(我怀疑)更改,这会影响很多事情,例如在 webapps 的配置文件中配置的基本 URL(例如,$wgServer 变量在 MediaWiki 的 LocalSettings.php 中)。
我在kubernetes的端口之一上运行pyspark。我正在尝试移植到我的本地计算机。执行我的python文件时出现此错误。
Forwarding from 127.0.0.1:7077 -> 7077
Forwarding from [::1]:7077 -> 7077
Handling connection for 7077
E0401 01:08:11.964798 20399 portforward.go:400] an error occurred forwarding 7077 -> 7077: error forwarding port 7077 to pod 68ced395bd081247d1ee6b431776ac2bd3fbfda4d516da156959b6271c2ad90c, uid : exit status 1: 2019/03/31 19:38:11 socat[1748104] E connect(5, AF=2 127.0.0.1:7077, 16): Connection refused
Run Code Online (Sandbox Code Playgroud)
这是我的python文件的几行。在定义conf的行中出现错误。
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
conf = SparkConf().setMaster("spark://localhost:7077").setAppName("Stand Alone Python Script")
Run Code Online (Sandbox Code Playgroud)
我已经尝试socat在kubernetes上安装。我正在本地使用Spark版本2.4.0。我什至尝试在YAML文件中公开端口7077。没有解决。
这是用于部署的YAML文件。
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
creationTimestamp: 2018-10-07T15:23:35Z
generation: 16
labels:
chart: spark-0.2.1 …Run Code Online (Sandbox Code Playgroud) portforwarding ×10
c++ ×2
networking ×2
ssh ×2
upnp ×2
adb ×1
amazon-elb ×1
android ×1
c# ×1
gitlab ×1
kubectl ×1
libssh ×1
miniupnpc ×1
nat ×1
nginx ×1
port ×1
socat ×1
sql-server ×1
udp ×1
usb ×1
visual-c++ ×1