问题标签 [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.
c++ - ICMP回复包
我想知道您是否可以使用 icmp.dll 的 API 生成 ICMP 回复数据包?到目前为止,我只能使用 IcmpCreateFile、IcmpSendEcho 和 IcmpCloseHandle API 发送标准请求数据包。谢谢。
python - 在 Python 中创建 ICMP 跟踪路由
我正在尝试在 Python 中实现基于 ICMP 的 Traceroute。我找到了一个非常有用的指南 ( https://blogs.oracle.com/ksplice/entry/learning_by_doing_writing_your ),它允许我创建一个基于 UDP 的 Traceroute,所以只需要修改。但是,我环顾四周,无法更改发送套接字并使其工作。有人可以帮助我吗?
sockets - 接收“Destination Unreachable”数据包时不发送 ICMP 回显请求
我正在开发一个网络管理应用程序,该应用程序使用 ICMP 通过原始 BSD 套接字 ( sendto
) 对托管主机执行 ping 操作。
我的问题不是如何做到这一点,事实上它运作良好。我似乎只是在目标主机向管理服务器发送目的地不可达消息时遇到问题,而我正在尝试向该主机发送 ICMP 回显请求。
当在管理应用程序中添加主机时,将使用所述 ICMP ping 对其进行测试,同时启动“发现”,使用各自的协议测试主机上的各种端口,例如 SNMP (161) 等需要这样做。
现在,我知道在我不知道它是否存在或响应的主机上执行该“发现”没有多大意义(即它发送了 ICMP 回显回复),但对于这个问题,这是至关重要的。让我们还假设这里讨论的主机实际上是可访问的,并且确实响应 ICMP ping,例如通过命令行ping
。
“发现”最终会导致一些 ICMP “目标不可达:端口不可达”数据包被发送回管理服务器,例如,当目标主机上没有运行 SNMP 代理并且端口 161 实际上无法访问时。
这很好,但由于某种原因,这似乎阻碍了 ICMP 套接字向该主机发送 ICMP 回显请求,这是 ICMP ping 所必需的。由于该请求从未发送过,因此我的应用程序没有得到回复,并且主机将在一段时间后被视为“无法访问”(超时)。
我使用 Wireshark 分析了网络流量,因此我可以看出实际上没有发送到目标主机的 ICMP 回显请求。我工作的应用程序还有一个“状态轮询”功能,可用于“手动”在该主机上执行另一个 ICMP ping。如果在添加主机之后使用它(即不再有目的地不可达数据包传入),则发送回显请求没有任何问题。
我对在我上面解释的情况下没有发送 ICMP 回显请求感到困惑。我确实有另一个 ICMP 套接字接收所有传入的 ICMP 数据包(为了对回复做出反应),但它不应该影响发送套接字,不是吗?在我的代码中,没有为Destination unreachable消息定义任何反应,它们只是被忽略了,所以我非常确定不是我自己的代码禁用了请求发送。
事实上,sendto
负责发送请求的函数已执行(通过调试确保这一点),甚至返回成功(发送的字节数),但实际上并未发送数据包。我可以在 Windows 和 Linux 系统上重现此问题,因此我不认为这是任何操作系统问题。
禁用导致那些无法到达的目的地消息被发回的“发现”可以让一切再次正常工作,所以我相当肯定是这些消息阻碍了 ICMP 回显请求的发送。我找不到答案的大问题是:为什么会这样?
如果需要,我可以提供更多信息,但是,我恐怕不允许在这里发布任何代码,因为这是一个商业产品。不过,代码并没有什么特别之处,只是使用原始 ICMP 套接字发送TOS=0
和接收 ICMP (IPv4) 数据包。TTL=64
python - Python 中的 ICMP 跟踪路由
我正在尝试在 Python 中实现基于 ICMP 的 Traceroute。
我找到了一个非常有用的指南(https://blogs.oracle.com/ksplice/entry/learning_by_doing_writing_your),它允许我创建一个基于 UDP 的 Traceroute(下面的代码),所以只需要修改。我尝试将发送套接字更改为 ICMP,但是没有异常我无法运行任何东西。
注意 - 下面的代码有效,但是这是一个 UDP 跟踪路由(发送一个 UDP 数据包并接收一个 ICMP 数据包),我需要我的程序发送一个 ICMP 数据包并接收一个 ICMP 数据包。本质上,UDP 套接字需要更改为 ICMP 套接字。
我想这不是最常见的尝试和实现的事情,并且在网上研究如何做到这一点时遇到了麻烦。如果有人可以提供一些见解,将不胜感激:-)
networking - ICMP 错误消息和生成它们的 IP 数据包之间的相关性
我需要发送一堆我确定会触发 ICMP TTL 过期错误消息的 IP 数据包。如何准确地将每条错误消息与生成它的数据包相关联?ICMP 标头中的哪个字段用于此目的?
我是否应该在原始 IP 标头中使用一些自定义 ID 号,以便我可以知道哪个错误消息对应于哪个数据包?如果是这样,哪个领域最适合这个?
python - 如何在 Python 中创建 ICMP 跟踪路由
我正在尝试在 Python 中实现基于 ICMP 的 Traceroute。
我找到了一个非常有用的指南(https://blogs.oracle.com/ksplice/entry/learning_by_doing_writing_your),它允许我创建一个基于 UDP 的 Traceroute(下面的代码),所以只需要修改。我尝试将发送套接字更改为 ICMP,但是没有异常我无法运行任何东西。
注意 - 下面的代码有效,但是这是一个 UDP 跟踪路由(发送一个 UDP 数据包并接收一个 ICMP 数据包),我需要我的程序发送一个 ICMP 数据包并接收一个 ICMP 数据包。这是因为如今的防火墙比以前更智能,并且在接收到随机端口的 UDP 数据包后并不总是发送 ICMP 响应。本质上,UDP 套接字需要更改为 ICMP 套接字。
我想这不是最常见的尝试和实现的事情,并且在网上研究如何做到这一点时遇到了麻烦。如果有人可以提供一些见解,将不胜感激:-)
要记住的要点是,traceroutes 通过设置 TTL 来工作,所以如果解决方案是使用 ICMP 库,那么它需要有一个可配置的 TTL :-)
windows-server-2008 - 在 Windows Server 2008 R2 中阻止 ping
我已经在Windows Server 2008 R2 上部署了我的 Asp.Net Web 应用程序, 并且我想阻止对该服务器的所有ping请求而不影响我的应用程序。
提前致谢
networking - 为什么 traceroute 发送 UDP 数据包而不是 ICMP 数据包?
根据 Stevens (TCP/IP Illustrated) 的说法,traceroute程序将 UDP 数据包发送到具有增量 TTL(1、2、3 等)的目标主机,以从ICMP TTL EXPIRED消息中获取中间跃点信息。
“目的地已到达”条件是ICMP PORT UNREACHABLE消息,因为 traceroute 寻址一个具有高数字的随机端口(即:不太可能有人在那里监听)
所以我的问题是:是否存在技术原因(缺点、RFC 等? ) 使用 UDP 数据包而不是使用例如ICMP 回显请求消息(具有增加的 TTL)并使用回显答复作为结束条件?
我知道 ICMP 回显回复可能会被中间的防火墙或其他网络设备过滤掉,但我想这也可能发生在 UDP 数据包中;)
非常感谢
塞尔吉奥
icmp - scapy:修改嗅探流量 TTL 的正确方法
我正在和 Scapy 玩耍,我注意到一些奇怪的事情。
如果我创建一个数据包以触发 ICMP 超时错误消息:
...一旦我使用该功能发送 ICMP 消息,我就会收到它sr
。
另一方面,如果我获取任何已嗅探的传出数据包并将其 ttl 值更改为上面使用的相同值,我将得不到任何回复。
这里有什么问题?我以为我可以通过使用虚拟流量而不是真实流量来体验这一点!我什至尝试使用其他 TTL 值,但无济于事。
snmp - ICMP 和 SNMP ping 在流量方面的比较?
我有 100 台设备,我想知道每 10 秒的状态。您能否告诉我在流量负载方面使用 ICMP 或 SNMP 是否更好,或者它们在阻塞网络方面都一样吗?