Workaround unprivileged PacketConn on darwin returns the entire IP packet in icmp.ListenPacket() #37
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.
TLDR: unprivileged icmp echo replies are discarded on macOS (darwin)
This is a patch to work around an issue described in golang/go#47369 which can be summarized as follows:
Due to setting the IP_STRPHDR socket option in darwin (macOS) environments,
reads on unprivileged sockets (udp) include the IP header before the ICMP header in the read bytes returned by
icmp.ListenPacket()
. As a result of this,pro-bing
ends up discarding icmp echo replies due to the unexpected ip header bytes returned byicmp.ListenPacket()
.While this problem needs to be addressed in go itself, this patch provides a work around until this issue is addressed.