Назад | Перейти на главную страницу

Как узнать, доступен ли порт в Ubuntu 8.04?

Есть ли какая-нибудь команда, которую я могу запустить из bash, которая скажет мне, открыт ли уже порт?

Используйте "netstat", чтобы проверить, какие порты используются в настоящее время.

netstat -antp

Proto Recv-Q Send-Q Local Address        Foreign Address   State    PID/Program name
tcp        0      0 xxx.xxx.xxx.xxx      0.0.0.0:*         LISTEN   16297/named     
tcp        0      0 xxx.xxx.xxx.xxx:53   0.0.0.0:*         LISTEN   16297/named     
tcp        0      0 xxx.xxx.xxx.xxx:53   0.0.0.0:*         LISTEN   16297/named     
tcp        0      0 127.0.0.1:53         0.0.0.0:*         LISTEN   16297/named     

Это (netstat) - самое быстрое решение ...

netstat -lnt

... но это дает вам больше контроля (за счет скорости (иногда большой скорости)) ...

lsof -n -i -a -u www-data

В приведенном выше примере, например, показаны все открытые TCP-порты и в LISTEN состояние, И (-a) принадлежащий Apache (www-data) пользователь.

Все хорошие ответы.

Однако вы не указываете, вошли ли вы на данный компьютер. ;П

Если нет, то Nmap твой друг.

для начала попробуйте:

nmap -Otarget

карта также хороший выбор, который также будет пытаться угадать серверное программное обеспечение, захватывая страницы с баннерами.

для начала попробуйте:

amaptarget1-6000

Пытаться

lsof -i :<port number>

Если вы получили какие-либо результаты, значит, что-то слушает и связывает, например

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
netstat -tlnp  

Шоу tcp порты, которые lрадость, шоу nтолько umbers (не разрешать имена - делает это быстрее) и показывать pпроцесс, который слушает ( p работает только если вы root)

netstat -ulnp  

Шоу uDP порты, которые lрадость, шоу nтолько umbers (не разрешать имена - делает это быстрее) и показывать pпроцесс, который слушает ( p работает только если вы root)

netstat -unp  

Шоу uпорты DP, которые открыты, но не слушают, показать nтолько umbers (не разрешать имена - делает это быстрее) и показывать pпроцесс, который слушает ( p работает только если вы root)

netstat -an

Шоу aвсе используемые порты, показать nтолько umbers - не разрешать имена

lsof -i <proto>@<host>:<port>

например

lsof -i tcp@localhost:25

чтобы узнать, прослушивает ли что-нибудь порт localhost 25 / TCP, или

lsof -i tcp@0.0.0.0:636 

чтобы увидеть, есть ли какие-либо сокеты, локальные или удаленные, слушающие (локальные) или подключенные (локальные или удаленные) для любого хоста / интерфейса

lsof (список открытых файлов) - хороший инструмент, чтобы узнать, прослушивает ли процесс порт.

lsof -P | grep: <номер-порта>

netstat - хороший инструмент для проверки наличия активных соединений.

netstat -n | grep: <номер-порта>

Вы не упоминаете, какой протокол вы хотите использовать, то есть TCP или UDP - и также важно понимать, что «порт» не такой детальный, который система поддерживает для устранения неоднозначности сокетов. Например. если в вашей системе несколько IP-адресов, то порт 80 может использоваться на всех IP-адресах (либо приложение привязано к «0.0.0.0» или «::», либо к каждому IP-адресу последовательно), либо он может использоваться только на подмножестве этих IP-адресов.

Лучший и самый надежный способ определить, свободен ли порт / адрес и доступен ли он, - это попытаться привязаться к нему. Netcat удобен для этого.

nc -l [-s a.b.c.d] -p NN

попытается подключиться к TCP-порту NN (необязательно, по умолчанию будут все адреса) a.b.c.d. Добавьте параметр -u, чтобы сделать то же самое в UDP.

Затем, чтобы определить, действительно ли порт «открыт», как вы спрашиваете, вам нужно начать изучать возможные правила брандмауэра. Опять же, проще всего попробовать подключиться к порту. Используйте netcat, как указано выше, на сервере и на клиенте используйте netcat, чтобы попытаться подключиться к открытому порту.

nc [-u] a.b.c.d NN

будет подключаться к порту NN на a.b.c.d, используя UDP, если указан флаг -u. Затем вы можете ввести ввод на стороне клиента, и он должен появиться на сервере. Если это не так, вам нужно изучить системные и сетевые инструменты.

я использую термоэлемент (в пакете psmisc):

fuser -n tcp ПОРТ

Возвращает пид процесса, привязанного к этому порту.

Если это необходимо, чтобы узнать, прослушивает ли порт, старый добрый телнет делает свое дело :)

telnet 127.0.0.1 ПОРТ

Этот однострочный список предоставит вам список всех используемых портов TCP. Он работает в bash на Ubuntu и OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

В списке будет по одному порту на строку без дополнительной информации.

Многие способы сделать это вызвали у меня проблемы, потому что они не работали в Linux и OSX и / или потому, что они не отображали порты, используемые докером, или процессы, принадлежащие пользователю root. Сейчас я просто использую эту программу на javascript:

(убедитесь, что у вас установлен узел и он работает с node не просто nodejs или измените программу соответственно)

сохраните следующее в файл с именем check-port на вашем пути или в вашем проекте

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

установить разрешения

chmod +x path/to/check-port

убегай со своего пути

check-port 8080

или запустить из того же каталога

./check-port 8080

пока работает довольно хорошо.