diff options
author | Sami Kerola <kerolasa@iki.fi> | 2018-11-02 22:03:05 +0000 |
---|---|---|
committer | Sami Kerola <kerolasa@iki.fi> | 2018-11-11 10:47:57 +0000 |
commit | 18c56c24a059cce73cb473ff426454f0d96e1400 (patch) | |
tree | 14b68a649cbcfbfddca53188569e9bdfce05c256 | |
parent | 15f24990b5d1430818f346488a5f5e466e89f983 (diff) | |
download | iputils-18c56c24a059cce73cb473ff426454f0d96e1400.tar.gz |
traceroute6: get smallest unprivileged port from kernel runtime
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
-rw-r--r-- | traceroute6.c | 16 |
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"); |