github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/portallocator/portallocator_linux.go (about) 1 package portallocator 2 3 import ( 4 "bufio" 5 "fmt" 6 "os" 7 ) 8 9 func getDynamicPortRange() (start int, end int, err error) { 10 const portRangeKernelParam = "/proc/sys/net/ipv4/ip_local_port_range" 11 portRangeFallback := fmt.Sprintf("using fallback port range %d-%d", defaultPortRangeStart, defaultPortRangeEnd) 12 file, err := os.Open(portRangeKernelParam) 13 if err != nil { 14 return 0, 0, fmt.Errorf("port allocator - %s due to error: %v", portRangeFallback, err) 15 } 16 17 defer file.Close() 18 19 n, err := fmt.Fscanf(bufio.NewReader(file), "%d\t%d", &start, &end) 20 if n != 2 || err != nil { 21 if err == nil { 22 err = fmt.Errorf("unexpected count of parsed numbers (%d)", n) 23 } 24 return 0, 0, fmt.Errorf("port allocator - failed to parse system ephemeral port range from %s - %s: %v", portRangeKernelParam, portRangeFallback, err) 25 } 26 return start, end, nil 27 }