问题标签 [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.

0 投票
4 回答
3371 浏览

java - 使用 java ping 到多平台

我需要对某个 ip/机器执行 ping 操作。该代码可以在任何类型的平台(windows、linux、mac)上执行,我需要获取有关丢失和往返时间的信息。所以 java 的 ping 执行不够好,因为我需要将 ping 响应解析为字符串,每个平台和每个操作系统语言都不同。所以我需要做什么?我知道有类似 JNI 的东西,但我是 java 新手,所以在这里需要一点帮助。这仍然意味着我需要每个平台都有本地实现吗?有什么例子或建议吗?

0 投票
2 回答
1375 浏览

c# - C# - 禁用 ICMP 的 Ping 服务器

我正在尝试使用PingReply类频繁地 ping 一系列服务器。大多数时候这很好,但其他时候我会收到失败的 ping。我猜这与在远程服务器上禁用 ICMP 有关。即使禁用了 ICMP,是否有任何方法可以从服务器获取 ping?

0 投票
1 回答
5514 浏览

udp - 如何在 Windows 上的 UDP 套接字上获取 ICMP 端口不可达数据包

我有一个使用带有 UDP 的 sendto() 来检查不同端口上的资源的应用程序。如何使用 recvfrom() 获取 ICMP 端口不可达数据包?

我的 recvfrom() 是这样的:

当发生 ICMP 端口不可达时,nReceived = -1,并且 WSAGetLastError() 返回 WSAECONNRESET(10054)。

但由于我正在检查不同的端口,我想要一种方法来确定哪个端口触发了 ICMP 端口不可达消息。我怎样才能确定呢?(也许我可以设置一些套接字选项?)

编辑: 根据 Len 的建议(仅使用 ICMP),我尝试按套接字(AF_INET、SOCK_RAW、IPPROTO_ICMP)创建一个套接字,然后在其上调用 recvfrom()。recvfrom() 返回 10022(WSAEINVAL) 错误,因为套接字未绑定。我应该如何解决这个问题?

0 投票
1 回答
974 浏览

actionscript - 是否可以从 swf 发送 ICMP 回显请求?

ActionScript 3 可以通过flash.net.DatagramSocket发送 UDP 数据包。他们有什么方法可以发送 ICMP 数据包吗?我还想设置 TTL 标志,以便我可以在 SWF中实现traceroute 。

0 投票
2 回答
5254 浏览

icmp - 路径 MTU 发现 - ICMP 响应在哪里?

我正在 Linux 中做一些关于路径 MTU 发现的实验。据我从 RFC 1191 了解,如果路由器接收到一个非零 DF 位的数据包,并且该数据包无法在没有分片的情况下发送到下一个主机,那么路由器应该丢弃该数据包并将 ICMP 消息发送到初始发件人。

我在我的计算机上创建了几个 VM 并以下列方式链接它们:

Rx - 是安装了 Linux 的虚拟机,它们有两个带有静态路由的网络接口。从 V1 ping V2,反之亦然成功。

分段 100.x 和 150.x 的 MTU 为 1500。分段 200.x 的 MTU 为 750。

我正在尝试发送启用了 DF 的 UDP 数据包。事实上,如果数据包的大小大于 750(我收到 send() 调用的 EMSGSIZE 错误),VM1 根本不会发送数据包。

但是,我希望大小超过 1500 的数据包会出现这种行为。并且我希望 VM1 将大小在 750 到 1500 之间的数据包发送到 R1,并且 R1(或 R2)丢弃此类数据包并将 ICMP 数据包返回给 VM1 . 但这不会发生。

有两个问题:

1)为什么?

2) 是否可以根据 RFC 1191 设置我的虚拟网络以接收 ICMP 数据包?

谢谢。

0 投票
1 回答
1664 浏览

c - 创建 PING 程序时限制 ICMP 回显应答

我正在编写一个多线程 ping 程序。我在每个线程(针对每个 IP)上创建了 rawsocket,并使用 sendto() 向每个线程发送了 ICMP Echo Request,然后在每个线程中执行了 recvfrom()。我从各种套接字中的 IP 获取消息(例如,如果我使用套接字 S1 发送到 IP1,我会收到从 IP1 到 S1、S2 等的回显回复)。我需要做绑定吗?

另一个问题是,即使我只发送了 1 个 ICMP 请求,我也会从目标收到许多回显回复。有什么办法可以限制这个吗?这导致我错过了一些其他 ICMP 数据包。有没有办法让我的程序要求目标停止发送 ICMP 回显?

谢谢,

0 投票
2 回答
1920 浏览

c# - 如何使用 UDP 实现 Traceroute?

显然 ICMP 不是创建 Traceroute 的唯一方法。这个这个答案表明可以发送具有低 TTL 的 UDP 数据包(或任何其他数据包)并等待 ICMP 消息。

我将如何在 C# 中实现它?System.IO.Sockets?TCP 对象?有人知道一个简单/最好的方法吗?

更新1:

当 TTL 被命中时,以下代码似乎正确地引发了异常。如何从返回的 UDP 数据包中提取信息?

我怎么知道我收到的 UDP 数据包是给我的(而不是我主机上的其他应用程序?)

0 投票
4 回答
32375 浏览

android - 如何在android上进行icmp ping

我需要从我的 android 设备对主机进行 icmp ping。我需要测量往返时间。我精通android和java,只是不知道使用什么库。我该怎么做?可以通过 3G、Edge 实现吗?

0 投票
3 回答
2878 浏览

c - 如何验证 ICMPv6 校验和?(为什么我总是得到 0x3fff 的校验和?)

我正在开发一个接收 IPv6 路由器广告数据包的 Linux 用户空间程序。作为 RFC4861 的一部分,我需要验证 ICMPv6 校验和。根据我的研究,如果您计算 IPv6 伪标头和数据包内容的互补校验和,则其中大部分是指一般的 IP 校验和,结果应该是 0xffff。但我不断收到 0x3fff 的校验和。

我的校验和实现有问题吗?Linux内核在将数据包传递给用户空间之前会验证ICMPv6校验和吗?是否有用于测试已知良好 ICMPv6 数据包的良好参考源?

0 投票
1 回答
841 浏览

linux - 收到 ICMPv4/v6 重定向 pkt 但路由表未更新?

在 FreeBSD/Linux 中,ICMPv4/v6 Redirect pkt 可以被操作系统接收,但是路由表不会相应改变?

我在 /proc 下启用了必要的 sysctl 变量来接受重定向 pkt。

有什么建议吗?