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

28

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

Codebeef
источник

Ответы:

37

Используйте «netstat» для проверки используемых в настоящее время портов.

netstat -antp

Proto Recv-Q Send-Q Локальный адрес Внешний адрес Состояние PID / Название программы
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     
гусеница
источник
2
"netstat -antp | grep 80", где 80 - номер порта для поиска.
Умайр А.
13

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

netstat -lnt

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

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

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

Ксеркс
источник
8

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

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

Если нет, то nmap - ваш друг.

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

nmap -Otarget

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

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

amaptarget1-6000

Мэтью
источник
7

Пытаться

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)
Дейв Чейни
источник
4
netstat -tlnp  

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

netstat -ulnp  

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

netstat -unp  

Показать udp порты, которые открыты, но не слушают, показать 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 

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

Джейсон Тан
источник
2

lsof (список открытых файлов) - хороший инструмент для проверки, прослушивает ли процесс порт

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

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

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

Джейми
источник
2

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

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

nc -l [-s abcd] -p NN

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

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

nc [-u] abcd NN

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

colmmacc
источник
2

Я использую фьюзер (в пакете psmisc):

fuser -n tcp PORT

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

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

ПОРТ Telnet 127.0.0.1

октябрь
источник
2

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

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

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

Иосия Джонстон
источник
Любить это! gret загляните в сценарии bash, например:for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
Grzegorz Wierzowiecki
0

Множество способов сделать это вызвало у меня проблемы, потому что они не работали на linux и osx, и / или потому что они не отображали порты, используемые docker, или процессы, которые принадлежали 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

до сих пор это работает довольно хорошо.

Alex028502
источник