summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSami Kerola <kerolasa@iki.fi>2018-11-02 22:03:05 +0000
committerSami Kerola <kerolasa@iki.fi>2018-11-11 10:47:57 +0000
commit18c56c24a059cce73cb473ff426454f0d96e1400 (patch)
tree14b68a649cbcfbfddca53188569e9bdfce05c256
parent15f24990b5d1430818f346488a5f5e466e89f983 (diff)
downloadiputils-18c56c24a059cce73cb473ff426454f0d96e1400.tar.gz
traceroute6: get smallest unprivileged port from kernel runtime
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
-rw-r--r--traceroute6.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/traceroute6.c b/traceroute6.c
index a324570..4af071b 100644
--- a/traceroute6.c
+++ b/traceroute6.c
@@ -621,6 +621,20 @@ static __attribute__((noreturn)) void usage(void)
exit(1);
}
+static uint16_t get_ip_unprivileged_port_start(const uint16_t fallback)
+{
+ FILE *f;
+ uint16_t nr = fallback;
+
+ f = fopen("/proc/sys/net/ipv4/ip_unprivileged_port_start", "r");
+ if (f) {
+ if (fscanf(f, "%" SCNu16, &nr) != 1)
+ nr = fallback;
+ fclose(f);
+ }
+ return nr;
+}
+
int main(int argc, char **argv)
{
struct run_state ctl = {
@@ -847,7 +861,7 @@ int main(int argc, char **argv)
strlen(ctl.device) + 1) == -1)
perror("WARNING: interface is ignored");
}
- ctl.firsthop.sin6_port = htons(1025);
+ ctl.firsthop.sin6_port = htons(get_ip_unprivileged_port_start(1025));
if (connect(probe_fd, (struct sockaddr *)&ctl.firsthop,
sizeof(ctl.firsthop)) == -1) {
perror("connect");