问题标签 [icmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
networking - ICMP 标头校验和是否也包含数据?
作为家庭作业的一部分,我必须在 Linux 中编写一个 C 程序,该程序使用原始套接字生成对 ICMP Echo 请求的 ICMP 回复。ICMP 数据包中的数据是否也必须包含在校验和中?或者我应该只计算标题的校验和?
windows-xp - Windows XP 和 ICMPv6 上的 WinSock2
我正在尝试ping6
使用 WinSock2 以编程方式发送 ICMPv6 回显请求()。ICMPv6 校验和是根据将要发送的整个 IPv6 数据包计算的。出于这个原因 - 据我了解 - 操作系统(内核?)应该在发送数据包时计算它并将其写入 ICMPv6 标头。
这在 SUSE Linux Enterprise Server 11 上运行良好,但是,Windows XP 似乎没有这样做。它将校验和保留为我默认设置的值(零,我使用 Wireshark 进行了分析),因此接收端将丢弃它而不回复。
IPv6 在这台 WinXP 机器上正确设置。在 Wireshark 的帮助下,我什至发现它可以正确响应来自 SUSE Linux 服务器的 ICMPv6 ping,使用相同的代码发送。所以不可能是Windows XP 不支持ICMPv6。但是,我想知道Windows XP下的WinSock2是否可以。
WinSock2 API 确实提供了IPPROTO_ICMPV6
我为其创建原始套接字的协议。是否需要设置任何特殊的套接字选项才能自动计算 ICMPv6 校验和,或者是否有任何其他技巧?
python - 通过 SOCKS 服务器使用 ping?
我想定期检查我的 SOCKS 服务器是否工作正常。为了做到这一点,我想通过 SOCKS 服务器 ping 8.8.8.8(谷歌 DNS 服务器)。
还有其他推荐的方法吗?如果它是最佳的,我如何用 python ping SOCKS?
linux-kernel - linux内核icmp实现问题
在当前的 linux 内核中,
当 ICMP 模块收到 ECHO REQUEST 消息时,是否检查或限制数据大小?还是只是将数据放入新的 ICMP 消息中并发送回源?
我一直在阅读源代码,我很确定内核不会检查数据大小,但我想确定:)
python - 如何通过 icmp 嵌入和侦听数据以使用 python 建立隧道连接
我正在尝试编写一个隧道工具,但我无法从 icmp 接收数据包。我使用套接字库,是否有任何一个 pylibnet 或 pynet 库
c# - ICMP 禁用/阻止:如何使用 C# 检查 Internet 连接
如果 ICMP 被管理员阻止/禁用。当无法进行 ping 测试时,有什么方法可以通过 C# 检查互联网连接。
提前致谢。
c - C UDP服务器访问问题
假设你有一个 UDP 服务器在 Linux 的 9030 端口上运行,你不能以某种方式访问那个 UDP 服务器。没有防火墙或类似设置阻止访问该 UDP 端口。另外请注意,数据包到达操作系统的网络堆栈,当操作系统收到数据包时,它会立即发送目标端口不可达的 ICMP 数据包。令您惊讶的是,netstat 输出显示 UDP 服务器正在您分配的确切端口上运行,如下所示:
另请注意,UDP 服务器侦听公共 IP,而不是本地主机等。这意味着数据包到达该公共 IP 地址。
那么可能会出现什么问题呢?你最好的猜测是什么?我真的很困惑。
python - 从 Python 原始套接字接收到的数据包中交换了两个字节
我的 Python 程序正在从原始套接字接收 ICMP 目标不可达消息。使用以下代码创建套接字:
ICMP 目标不可达消息包括原始数据包的一部分的副本。我遇到的问题是嵌入式 IPv4 标头中的 2 字节总长度字段在从套接字接收时交换了它的字节。因此,我的程序中的校验和检查失败。使用以下代码接收数据包:
当我注意到校验和测试失败时,我用 tcpdump 检查了数据包。这是一个例子:
然后我从我的 Python 代码中打印出数据包。这是来自 tcpdump 示例的相同数据包:
嵌入标头的总长度字段是第 2 行的最后两个字节。0054 来自 tcpdump 和 5400 来自我的程序。外部 IP 标头的总长度字段也是错误的(5c00 与 tcpdump 中的 0070)。
我在跑步...
达尔文上的 Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) [GCC 4.2.1 (Apple Inc. build 5646)]
来自 tcpdump 的 ICMP 目标不可达数据包中的校验和字段是正确的。它的值为 fcfe。这是没有输出 IP 标头的数据包。
让我感到困惑的是,只有总长度字段针对网络字节顺序进行了更正。其他多字节字段没有改变,打印出来的和我的 Python 程序一样。例如,总长度后面的两个字节组成了标识字段,在 tcpdump 和我的打印输出中都具有 c2ea 的值。为了检查校验和,我如何确定应该交换哪些字段?
c - UDP 套接字无法接收 ECONNREFUSED
我使用套接字(AF_INET,SOCK_DGRAM,IPPROTO_UDP)创建了一个套接字。
据此,如果我多次发送简单数据包(乘以 send() 和/或 sendto()),我可以获得 ECONNREFUSED。ICMP 应该告诉之前的数据包没有到达并且 ECONNREFUSED 应该出现。但它失败了,errno 不报告任何错误,并且 send() 总是返回发送的字节数。
UDP 协议实际上不应该告诉该数据包已发送。但据我了解,ICMP 可以提供建议。
所以,问题是——为什么它没有收到 ECONNREFUSED?
一切都是使用 Winsock 完成的。
ping - Speedtouch st780i 正在阻止 ICMP
我正在用 VB 开发一个工具来进行 ping 测试,但是一些 speedtouch 780i 路由器阻止了 ICMP。
我自己在speedtouch路由器上试了一下。我远程登录并禁用防火墙和入侵检测,但 ICMP 仍然被阻止。
我遇到的实际问题不是如何修复以允许 ICMP 在 Speedtouch 路由器配置上运行。我更感兴趣的是如何在不接触路由器的情况下解决这个问题。
我注意到,如果我使用浏览器对 Web 应用程序进行 ping 测试,一切正常。如果 ping 是通过 cmd 进行的,则它不起作用。我在想这可能是一个端口问题,但我真的不确定。