2015-04-29 3 views
0

Мой двоичный файл принимает параметр порта и запускает http-сервер. Если передать 0 в -порт, он найдет свободный порт и начнет с него.Как найти порты, которые используются процессом в golang или вообще?

После этого, как мне найти, какой порт это, если у меня есть объект команды со мной и может получить идентификатор процесса? Я пытаюсь написать свое приложение в golang. Мне также любопытно, как это делается в целом.

+1

Если вы хотите эту информацию в вашей программе, просто используйте Addr) '' метод (на [ 'net.Listener'] (https://golang.org/ упак/нетто/# Слушатель). Если вы хотите его на улице, вы можете либо сделать что-то вроде «netstat», либо у вас может быть ваша программа, которая сохранит адрес/порт, который где-то используется (как и многие демона, пишут pidfile). –

ответ

2

Это OS специфична, но на Linux вы можете сделать

netstat -npl

что перечислит, какие программы прослушивает порты

Если вы просто хотите, чтобы распечатать его из вашего приложения вам, можно использовать альтернативную форму запуска сервера HTTP, создавая свой собственный протокол TCP слушателя, а затем вызвать http.Serve

пример:

package main 

import (
    "fmt" 
    "net" 
    "net/http" 
    "os" 
) 

func main() { 
    lsnr, err := net.Listen("tcp", ":0") 
    if err != nil { 
     fmt.Println("Error listening:", err) 
     os.Exit(1) 
    } 
    fmt.Println("Listening on:", lsnr.Addr()) 
    err = http.Serve(lsnr, nil) 
    fmt.Println("Server exited with:", err) 
    os.Exit(1) 
} 

выходы:

Listening on: [::]:53939 
Смежные вопросы