it-swarm-ru.tech

Проверить, открыт ли порт на сервере Linux?

Как я могу проверить, прослушивает ли порт сервер Linux?

228
James Anderson

Вы можете проверить, прослушивает ли процесс порт TCP или UDP) с помощью netstat -tuplen.

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

195
joschi

Самый быстрый способ проверить, открыт ли порт TCP (включая любые имеющиеся у вас аппаратные брандмауэры)), с удаленного компьютера (например, с вашего рабочего стола):

telnet myserver.com 80

Который попытается открыть соединение с портом 80 на этом сервере. Если вы получаете тайм-аут или отрицаете, порт не открыт :)

108
Adrian Macneil

Итак, в общем, у вас есть сервер, на который вы можете войти. Вы хотите увидеть, если что-то прослушивает какой-то порт. От имени пользователя root запустите:

netstat -nlp

это покажет список процессов, прослушивающих TCP и UDP-порты. Вы можете сканировать (или grep) его для процесса, который вас интересует, и/или номеров портов, которые вы ожидаете увидеть ,.

Если ожидаемого вами процесса нет, вам следует запустить этот процесс и снова проверить netstat. Если процесс существует, но он прослушивает интерфейс и порт, который вы не ожидали, то есть проблема конфигурации (например, это может быть прослушивание, но только на интерфейсе обратной связи, поэтому вы увидите 127.0.0.1:3306 и нет других строк для порта 3306, в случае конфигурации по умолчанию для MySQL).

Если процесс завершен, и он прослушивает ожидаемый вами порт, вы можете попробовать запустить "telnet" к этому порту с вашего Macbook в вашем офисе/доме, например,

 telnet xxxxxxxxxxxx.co.uk 443

Это проверит, если (при условии стандартных портов), что есть веб-сервер, настроенный для SSL. Обратите внимание, что этот тест с использованием telnet будет работать только в том случае, если процесс прослушивает порт TCP. Если это порт UDP, вы также можете попробовать использовать любой клиент, для которого вы собираетесь использовать подключиться к нему (я вижу, что вы использовали порт 224. Это masqdialer, и я понятия не имею, что это такое).

Если служба есть, но вы не можете получить к ней доступ извне, то есть брандмауэр, блокирующий вас. В этом случае запустите:

 iptables -L -n

Это покажет все правила брандмауэра, как определено в вашей системе. Вы можете опубликовать это, но, как правило, если вы не разрешаете все в цепочке INPUT, вам, вероятно, потребуется явно разрешить трафик на рассматриваемом порту:

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

или что-то вдоль этих линий. Не запускайте команды брандмауэра вслепую, основываясь на том, что незнакомец сказал вам в Интернете. Подумай, что ты делаешь.

Если ваш брандмауэр на коробке разрешает трафик, который вы хотите, то ваша хостинговая компания может использовать брандмауэр (например, они разрешают только SSH (22/tcp), HTTP (80/tcp) и HTTPS (443/tcp) и отрицание всего другого входящего трафика). В этом случае вам нужно открыть билет службы поддержки, чтобы решить эту проблему, хотя я полагаю, что в вашей cPanel может быть что-то, что может это позволить.

32
cjc

Я использую комбинацию netstat и ​​lsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

Чтобы увидеть, используется ли порт, и что его использует.

12
warren

Если вы подключены к системе и можете выполнить команду от имени пользователя root, вы можете проверить вывод iptables

iptables -L -vn

в этом списке будут перечислены правила брандмауэра и какие порты являются целевой целью ACCEPT, а любые явно закрытые порты назначения REJECT.

8
user9517

lsof -i :ssh выведет список всех процессов с открытым портом ssh, как прослушивающих, так и активных соединений.

6
pgs

Если вам нужен сценарий такого теста, решение Сергея Попова (см. Комментарий к вопросу), вероятно, является наилучшим, поскольку nc может выполнять поиск в открытом стеке TCP) порт вместо попытки фактического соединения.

Самая простая форма:

nc -z <ip> <port>

Команда возвращает true, если она находит указанное <ip>:<port> комбо как открытое (т.е. одна из ваших служб прослушивает).

Теперь вы можете написать скрипт для ожидания открытия порта:

while ! nc -z <ip> <port>
do
    sleep 1
done

Примечание 1: я пробовал -w опция командной строки, и это, похоже, ничего не делает. В любом случае команда возвращается немедленно. Я думаю, что -w бесполезно с -z.

Примечание 2: чтобы помочь отладке, попробуйте с -v опция командной строки.

0
Alexis Wilke