- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个在 Windows 机器上的 2 个网络接口(interface)之间执行 NAT 的应用程序,但我在理解正在发生的事情时遇到了一些问题。
系统中有2个网络接口(interface):
我的应用的作用:
为了演示发生了什么,我附上了一个 .cap file使用 Microsoft Network Monitor 3.4 捕获的数据包(它也可以在测试期间用 Wireshark 打开)。测试包括与 google.com:80 建立 TCP 连接。首先直接通过物理接口(interface)建立连接,证明有互联网连接,然后通过TAP接口(interface)建立连接,测试NAT。
从上到下的数据包分析:
很好,我们有互联网连接。现在我将默认网关更改为我的应用程序运行的虚拟路由器 (192.168.200.1)
经过NAT后,在物理接口(interface)上发送的数据包与第一次测试中发送的数据包几乎相同,网络拓扑没有任何变化。为什么第二次TCP连接不成功?这没有任何意义。
该程序正在使用 WinPcap。 Here如果有兴趣,是代码。
最佳答案
我检查了捕获的文件,在 TCP 层和 MAC 层 header (成功的 SYN 和不成功的 SYN 之间)没有发现任何差异。只有我看到在成功的SYN中,IP头校验和为0,可能是因为计算被卸载到接口(interface)卡上了。在不成功的 SYN 中,根据 Wireshark 计算校验和并正确。如果校验和正确,那应该不是问题。这是我在 IP 层看到的唯一区别。
我会说谷歌或中间人正在过滤掉您的下一条消息。
现在,我觉得奇怪的是为什么当您的应用程序关闭流索引 0 中的套接字时,它发送的是 RST 而不是 FIN。也许某个节点试图阻止来自您的 IP 地址的 RST 攻击?有没有办法关闭套接字并发送 [FIN, ACK] 消息?在运行第二个测试之前可以再等一段时间吗?
另一个奇怪之处在于,在第二次测试中,连接 192.168.200.100-您的应用 (03:03:03:03:03:03) 和“您的应用”-Google 使用相同的源端口 49181。这不是似乎是个问题,因为这是两台不同的机器,但我会把那里作为最后的资源进行调查。不过我认为这不是问题。
编辑:
在您解释了 TCP 段未经修改地移交后,我意识到问题是您没有重新计算 TCP 校验和!!!两个 SYN 消息(帧 7 和 8)具有相同的 TCP 校验和。如果 IP 地址更改,则 TCP 校验和也必须更改。
顺便说一句,这是一个非常有趣的问题。
关于networking - NAT 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21281513/
我考虑创建一个基于 NATS 的新解决方案,目前只剩下两个悬而未决的问题。在我的场景中,我需要客户端向服务器进行身份验证,以及可能的机制 user+pass、token 和 JWT 我想使用 toke
我需要在我的程序中以编程方式确定路由器 NAT 类型。我确实查看了一些与 STUN 相关的答案和关于 SO 的 UPnP 相关信息。但没有得到任何确定的答案。 我查看了 STUN RFC (rfc 5
以下两个命题很容易证明。 Theorem nat_eq_nat : nat = nat. Proof. trivial. Qed. Theorem True_neq_False : ~(True
如果我要求 gethostbyaddr() 查找 NAT 生成的 IP 地址,例如 192.168.0.4,我应该期望它起作用吗? 背景:我正在家里对一些用于网络环境的控制代码进行测试。有时,此代码会
我正在尝试使多层 NAT 后面的(apache)服务器可以从 Internet 访问。 限制: 避免中继。有一个公共(public)服务器(我们称他为 OldMan)用于登录/眩晕,但它的带宽太差,无
在 OCaml 中使用类型级算法,很容易定义一个函数,该函数的 nat 值高于特定值: let f : 'a succ nat -> string = function _ -> "hej" f Ze
我正在寻找一种方法来显示操作期间 NATS 流服务器上当前存在的所有主题。已经彻底查看了文档,但到目前为止还没有找到提及。 有没有办法找到可以在服务器上订阅的所有可用主题的列表? 最佳答案 我刚刚合并
我发现:“唯一需要 TURN 的情况是当其中一个对等点位于对称 NAT 后面,而另一个对等点位于对称 NAT 或端口限制 NAT 后面时。”那么,对称 NAT 后面的对等点如何连接后面的另一个点(例如
我的数据框是 time NTCS001G002 NTCS001W005 0 2013-05-30 23:00:00 NaN NaN 1 2013-06-30
我的问题是我需要增加 NATS 收到的 max_payload 值,但我不知道我可以在哪里做。 该项目正在使用 Moleculer,NATS 被创建为带有 docker 的容器。 当我尝试发出大于 1
我正在尝试调试一个问题,我了解 VirtualBox 中的 NAT 网络适配器与 VMWare Fusion 中的 NAT 网络适配器之间的区别。到目前为止,我可以配置 VMWare 并实现我想要的结
是否可以向 nat 后面的主机发送回显请求 后。所有的 echo-request 都不包含目标主机的端口,因此如果有多个主机使用相同的外部 ip 地址,nat 将如何将 echo-reques
是否有任何工具可用于监控通过 NATS 队列发布的实际消息?对于演示文稿,我需要显示通过微服务架构显示的消息,最好通过现有解决方案来实现,而不是自己编写一个。 我现在有 Natsboard ( htt
根据维基百科文章 Micro Transport Protocol支持使用UDP打洞的NAT穿越。但是看着libutp's project page我在头文件中找不到任何这样的引用。我错过了一些明显的
我在网上查了一下,我发现的所有内容都显示了如何创建一个单独的服务器来连接到位于 nat 或防火墙后面的主服务器。 但在我的例子中,客户端位于 NAT 后面,服务器位于本地网络上。 所以它的设置有点像下
我已经在我的 Windows 机器上启动并运行了带 docker 的 NATS 服务器。 我也想在我的 Windows 机器上安装 nats CLI 工具。 文档中只提到了 Mac 和 Linux。
我已经安装了 Asterisk 11 并出现了这个错误。我更改了 sip.conf 并且仍然在 Asterisk Debug模式下看到错误日志。 Asterisk 日志 [Apr 16 20:43:0
我有以下 Cloud Formation 配置,其中包括子网、路由表/路由、nat 网关和弹性 IP: lambdaPointToIgwStaging: Type: 'AWS::EC2::
我在私有(private)子网中的 aws 上使用 Kops 创建了一个 kubernetes 集群。 当使用 NAT 网关作为集群中的导出点时,一切正常。但是,当我尝试将 NAT 实例部署为集群中的
配置LVS-NAT模式 由于我们要进行LVS-NAT模式集群搭建。首先在VMware中添加两个虚拟网段 VMnet2:做内网的网段 VMnet4:做外网的网段 然后
我是一名优秀的程序员,十分优秀!