Как я могу проверить, прослушивает ли порт сервер Linux?
netstat -an | grep PORTNUMBER | grep -i listen
Если вывод пуст, порт не используется.
Как я могу проверить, прослушивает ли порт сервер Linux?
netstat -an | grep PORTNUMBER | grep -i listen
Если вывод пуст, порт не используется.
Ответы:
Вы можете проверить, прослушивает ли процесс порт TCP или UDP с помощью netstat -tuplen
.
Чтобы проверить, доступны ли некоторые порты извне (это, вероятно, то, что вам нужно), вы можете использовать сканер портов, такой как Nmap, из другой системы. Запуск Nmap на том же хосте, который вы хотите проверить, совершенно бесполезен для вашей цели.
-t
, -u
, -p
, -l
, -e
, и -n
. Благодаря парсеру параметров это можно выразить как -tuplen
. linux.die.net/man/8/netstat
telnet
команда обычно поддерживает только TCP, так что вам не повезло, если служба, которую вы хотите проверить, работает по другому протоколу.
sudo netstat -tuplen
. Это даст вам процессы, принадлежащие не только вам, но и другим, и распечатает дополнительную информацию (например, PID / Имя программы), если они еще не отображаются как пользователь без полномочий root.
Самый быстрый способ проверить, открыт ли порт TCP (включая любые имеющиеся у вас аппаратные брандмауэры), - набрать с удаленного компьютера (например, с вашего рабочего стола):
telnet myserver.com 80
Который будет пытаться открыть соединение с портом 80 на этом сервере. Если вы получаете тайм-аут или отрицаете, порт не открыт :)
if you get a time out or deny, the port is not open
Итак, в общем, у вас есть сервер, на который вы можете войти. Вы хотите увидеть, если что-то прослушивает какой-то порт. От имени пользователя 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 может быть что-то, что может это позволить.
Я использую комбо из netstat
и lsof
:
netstat -an | grep <portnumber>
lsof -i:<portnumber>
Чтобы увидеть, используется ли порт, и что его использует.
Если вы подключены к системе и можете запустить команду от имени пользователя root, вы можете проверить вывод iptables.
iptables -L -vn
в этом списке будут перечислены правила брандмауэра, а также какие порты являются целевыми открытыми ACCEPT
и любые явно закрытые целевые порты REJECT
.
firewall-cmd --query-port=port/protocol
, например firewall-cmd --query-port=80/tcp
.
lsof -i :ssh
выведет список всех процессов с открытым портом ssh, как прослушивающих, так и активных соединений.
sudo
если он не возвращает никакого вывода.