This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
avoid processing incorrect ICMP message on Unix #34084
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
fixes #33699 Ping.Unix falsely returns successful pings
When we use RAW socket implementation we simply create socket to get all ICMP.
When there are multiple pings going (even from different process) the raw socket would receive all ICMP responses and than it can incorrectly report success even for non existing host.
This change effectively implements address filtering. Instead of doing it explicitly as discussed in issue, it uses Connect() to ping socket to only that address for Unicast. (similar behavior to UDP)
I don't know if there is better way to determine multicast (leading 1110) IP for IPv4.
Aside from running tests, I did verify that ping to multicast (224.0.0.1 all nodes) still works as it used to. There is currently not good API to know what nodes responded to the query. So successful response means that there is at least one responding node.
I also did tests with broadcast and directed broadcast (xx.xx.xx.255)
It fails with even for root:
this is because we would need to do ioctl to enable broadcast functions on socket.
This behavior remains same with this change.