问题标签 [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.
ruby - 如何仅使用标准套接字库在 Ruby 中实现 ICMP ping?
应该可以使用 Ruby 套接字库发送和接收 ICMP 数据包,但我没有看到任何好的文档。
我不想使用 net-ping、icmp、ping 和所有这些由于跨平台问题而失败、需要 devkit 和自定义构建的库,这些库在构建过程中失败,被忽略且尚未更新很长一段时间,和/或只是一般的越野车。
有没有人有关于如何做到这一点的任何好的文档?我想发送 ICMP 回显回复,而不是 TCP 或 UDP 数据包。
linux - 使用 RAW 套接字在 Linux 上捕获传出的 icmpv6 数据包
我正在尝试捕获从 Linux 上的主机发出的传入和传出 icmpv6 数据包。我已经编写了以下程序来做到这一点。在这个程序中,我们可以捕获传入的数据包而不是传出的数据包。捕获对于 icmpv4 数据包(代码的注释部分)工作正常,但对于 icmpv6 数据包它是一个问题。我对使用包过滤(Berkley Packet Filter)机制不感兴趣,与我在下面使用的方法相比,它有点侵入性。你能告诉我是否还有其他东西可以用来做这件事吗?或者Linux是否提供任何其他机制来做到这一点?
delphi - 当 ping.exe 成功时,什么会导致 ICMPsendEcho 失败
我手头有一个有趣的情况,我不太确定如何解决它。我做了一些与我的情况类似的搜索,但没有什么能与之匹配。如果答案已经在这里的某个地方存在,我将不胜感激任何可以指出我正确方向的人。
好的,言归正传。
我正在编写一个监视互联网连接的看门狗应用程序。它旨在以设定的时间间隔 ping 一组域,并且当其中任何一个响应 ping 时,状态计时器被重置。如果状态计时器超过设定的阈值,则会尝试多个阶段的纠正措施来解决问题。
够简单吧?
这就是它变得奇怪的地方。
我正在使用 ICMPsendecho 发出 ping 请求。在我的开发环境(win7)上,它似乎工作正常,测试一切顺利。但是,在部署它的环境中,它无法收到响应。部署环境是一台windows XP sp3机器。
在整个故障排除过程中,我注意到了几件事,它们可能对实际尝试解决此问题有帮助,也可能没有帮助。
windows ping.exe 在我用来测试连接状态的所有域的部署环境中工作得很好,它只有我的 ICMPsendecho 调用似乎无法生成响应。
我已经在部署环境中安装了wireshark,我可以看到两种类型的ping请求都成功发出了数据包。windows ping 生成长度为 74 字节的请求数据包,我的程序调用生成长度为 42 字节的数据包。Windows 响应数据包在收到时也是类似的 74 字节。
切换到开发环境一分钟,安装了wireshark。Windows ping 会产生与部署环境中的数据包类似的情况。但是,我的应用程序在生成请求时,数据包长度为 42 个字节(与部署环境相同),但它收到的响应长度为 60 个字节。
正如我所说,这些信息可能有用,也可能没有用,但我试图找出为什么当 windows ping 似乎在该机器上正常工作时,此应用程序无法生成 ICMP 响应。
另一个可能有帮助的小消息,互联网连接被监控使用 AT&T 的提升 4g 热点,实际设备是 sierra 无线 MC8790 AirPrime 卡。
任何人对为什么这些 ping 失败有任何想法吗?
提前感谢您提供的任何有用信息以及花时间阅读我的帖子。
PS。
python - Twisted 和 ICMP (txNetTools)
有几次我看到提到异步 ping 最好使用 twisted。
我在线程上编写了实现(比如Ping a site in Python?)
但是在〜200个线程上我迷恋
在http://twistedmatrix.com/trac/wiki/ProjectsUsingTwisted页面上,我找到了 txNetTools - Ping、traceroute、icmp 等,在 Twisted 中实现,以及为那些想要构建自己的网络工具的人提供的库。
有人用过这个库吗?
我尝试使用它 ping.py:
如果改变:
至
也许我做错了什么或不明白?
PS扭曲12.0
networking - ICMP 回显包的最大合法大小
有人可以解释为什么 ICMP 回显数据包的最大合法大小计算如下:
65535 - 20 - 8 = 65507
谢谢。
c - 在 C 程序中发送 ICMP 数据包
我正在尝试用 C 创建一个 ICMP ping 测试程序,但在成功发送数据包时遇到了困难。该sendto
函数返回字节数,实际上没有发送任何数据包。我已经在目标计算机上使用 WireShark 验证了这一点。主机上的常规 ping 工作正常,但会显示在 WireShark 中。
这是我的代码:
对我做错了什么有任何想法吗?另外,校验和好吗?两者都使用 0 可以吗?
编辑:好的,所以感谢下面的人,我已经设法正确发送数据包!目标计算机将发回一个回显回复。但是,现在,我的程序没有收到回复。该select()
函数总是超时。我已经更新了上面的代码。
编辑2:好的,我已经开始工作了!我需要将套接字协议设置为,IPPROTO_ICMP
而不是IPPROTO_RAW
它工作得很好!再次感谢评论的各位!真的帮了大忙!看起来我只能将一个答案标记为正确,但你们都帮助解决了这个问题。:)
azure - 如何在 Azure 上启用 Ping(ICMP)
在 Windows Azure 角色中,我无法 ping 出
我google了一下,发现有人建议在命令下运行,但即使运行后,我仍然无法ping通
请有人告诉我原因以及如何绕过。
c++ - 对无法到达的目的地进行 ICMP 回显请求/回复的正确流程是什么?
目标:
我需要能够 ping 网络交换机以确定它是否可用。这是为了告诉用户网络电缆被拔掉,网络交换机不可用,或者网络通信路径中存在其他问题。我意识到这不是一个全面的诊断工具,但有总比没有好。
设计:
我计划使用带有原始套接字的 ICMP 以 IPv4 点表示法向特定地址发送五 (5) 条 ping 消息。我将在套接字上设置一个 ICMP 过滤器,并且不会创建我自己的 IP 标头。ICMP 的传输将通过 sendto 方法和 recvfrom 方法接收。这将发生在单个线程上(尽管可以使用另一个线程将传输和接收分开)。通过将接收到的消息的 ID 与发送的 ID 进行匹配,将进一步过滤消息的接收。存储的 ID 将是应用程序的运行进程 ID。如果收到 ICMP_ECHOREPLY 消息并且消息的 ID 和存储的 ID 匹配,则计数器会递增,直到达到五 (4)(计数器从零开始)。我会尝试发送一个 ping,等待它的回复,
问题:
在实现了我的设计之后,每当我与一个活跃的网络参与者 ping 一个特定的有效网络地址(比如 192.168.11.15)时,我都会收到五 (5) 个 ping 中的每一个的 ICMP_ECHOREPLY 消息。但是,每当我 ping 一个有效的网络地址(例如 192.168.30.30)与不活动的网络参与者(意味着没有设备连接到特定地址)时,我都会收到一 (1) 个 ICMP_DEST_UNREACH 和四 (4) 个 ICMP_ECHOREPLY 消息。回复消息中的 ID 与存储在软件中的 ID 相匹配。每当我从命令行执行 'ping 192.168.30.30' 时,我都会得到 'From 192.168.40.50 icmp_seq=xx Destination Host Unreachable'。我不应该接收 ICMP_DEST_UNREACH 消息而不是 ICMP_ECHOREPLY 消息吗?
编码:
平.h:
主.cpp:
为了编译,只需在 Linux 机器的命令行中键入“g++ main.cpp -o ping”,它应该可以编译(也就是说,如果安装了所有源代码)。
结论:
谁能告诉我为什么我从不在该特定网络地址上的设备收到一 (1) 个 ICMP_DEST_UNREACH 和四 (4) 个 ICMP_ECHOREPLY 消息?
注意:您可以从 main.cpp 文件更改网络 IP 地址。只需将 IP 更改为网络上实际存在的设备或网络上不存在的设备即可。
我也对关于编码风格的批评不感兴趣。我知道它不漂亮,有 'C' 风格的转换与 C++ 转换混合,内存管理很差等等,但这只是原型代码。它并不意味着漂亮。
windows - 如何判断计算机是否已打开并在网络上运行
我有一台为魔术 WOL 数据包配置的计算机,因此适配器将响应 ICMP。ping 计算机似乎不会提供很多有用的信息,因为即使在关机时它也会始终响应。这台机器运行 Windows 7,想知道是否有任何可用的小而快的协议可以用来检索有关计算机状态的信息。最好是一些小的,可以通过 php/python 以套接字的形式快速实现。我想要的最少信息是计算机是关闭还是打开。
我正在考虑使用 MS-HGRP 列出所有支持的系统,因为我知道机器出现在家庭网络中。但我不知道是否有比这更有效的东西。
windows - windows下如何判断发出icmp ping请求的进程
通过 WireSharking 网络流量,我发现我的 PC 正在向可疑 IP 地址发送 ICMP 回显请求,而我没有明确运行 ping.exe。必须有一些过程来做到这一点。我想找出答案。
我查看了传出 ICMP 数据包的标识符字段,但没有找到任何线索。(所有数据包的 id 字段值都是 0x200,在 *NIX 系统下不太可能,该字段用发起者的 pid 填充)。
我还使用 Process Explorer 来定位使用 icmp.dll 的进程,但没有找到。
运行的操作系统是 Windows XP Service Pack 2。
如果有人帮助我,我将不胜感激,谢谢。