Есть ли какая-нибудь команда, которую я могу запустить из bash, которая скажет мне, открыт ли порт?
28
Используйте «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
Это (netstat) самое быстрое решение ...
... но это дает вам больше контроля (ценой скорости (иногда большой скорости)) ...
Например, приведенный выше пример показывает, что все порты TCP открыты и находятся в
LISTEN
состоянии AND (-a
), принадлежащем пользователю Apache (www-data
).источник
Все хорошие ответы.
Однако вы не упоминаете, вошли ли вы в систему на данном компьютере. ;П
Если нет, то nmap - ваш друг.
для начала попробуйте:
nmap -O
target
amap также является хорошим выбором, который также попытается угадать серверное программное обеспечение, захватив баннерные страницы.
для начала попробуйте:
amap
target
1-6000
источник
Пытаться
Если вы получаете какие-либо результаты, что-то слушает и связывает, например,
источник
Показывать
t
порты cp, которыеl
истекают, показыватьn
только umbers (не разрешать имена - делает это быстрее) и показыватьp
процесс, выполняющий прослушивание (p
работает только, если вы root)Показывать
u
порты dp, которыеl
истекают, показыватьn
только umbers (не разрешать имена - делает это быстрее) и показыватьp
процесс, который выполняет прослушивание (p
работает только, если вы root)Показать
u
dp порты, которые открыты, но не слушают, показатьn
только umbers (не разрешать имена - делает это быстрее) и показатьp
процесс, который выполняет прослушивание (p
работает только если вы root)Показывать
a
все используемые порты, показыватьn
только umbers - не разрешать именанапример
чтобы узнать, прослушивает ли что-нибудь порт localhost 25 / TCP, или
чтобы увидеть, есть ли какие-либо сокеты, локальные или удаленные, либо прослушивающие (локальные), либо подключенные к (локальным или удаленным) для какого-либо хоста / интерфейса
источник
lsof (список открытых файлов) - хороший инструмент для проверки, прослушивает ли процесс порт
netstat - это хороший инструмент для проверки наличия активных соединений.
источник
Вы не упоминаете, какой протокол вы хотите использовать, например, TCP или UDP, и также важно понимать, что «порт» не настолько гранулирован, как система поддерживает устранение неоднозначности сокетов. Например, если ваша система имеет несколько IP-адресов, тогда порт 80 может использоваться на всех IP-адресах (либо приложение привязано к «0.0.0.0» или «::», либо к каждому IP-адресу подряд), либо оно может быть в использовать только на подмножестве этих IP-адресов.
Лучший и надежный способ определить, свободен и доступен ли порт / адрес, - попытаться привязать его. Netcat удобен для этого.
попытается подключиться к TCP-порту NN на (необязательно, по умолчанию будут все адреса). abcd Добавьте опцию -u, чтобы сделать то же самое в UDP.
Далее, чтобы сказать, действительно ли порт «открыт», как вы просите, вам нужно начать искать потенциальные правила брандмауэра. Опять же, самое простое - попытаться подключиться к порту. Используйте netcat, как указано выше, на сервере и на клиенте используйте netcat, чтобы попытаться подключиться к открытому порту.
nc [-u] abcd NN
подключится к порту NN в abcd, используя UDP, если указан флаг -u. Затем вы можете ввести ввод на стороне клиента, и он должен появиться на сервере. Если это не так, вам нужно изучить системные и сетевые инструменты.
источник
Я использую фьюзер (в пакете psmisc):
Возвращает pid процесса, привязанного к этому порту.
Если это нужно знать, если порт слушает, старый добрый телнет делает свое дело :)
источник
Эта строка содержит список всех используемых TCP-портов. Он работает в Bash на Ubuntu и OS X.
netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq
Список будет иметь один порт на линию без дополнительной информации.
источник
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
Множество способов сделать это вызвало у меня проблемы, потому что они не работали на linux и osx, и / или потому что они не отображали порты, используемые docker, или процессы, которые принадлежали root. Теперь я просто использую эту программу JavaScript:
(убедитесь, что у вас установлен узел и что он работает
node
не просто,nodejs
или измените программу соответствующим образом)сохраните следующее в файл с именем
check-port
в вашем пути или в вашем проектеустановить разрешения
бежать с вашего пути
или запустить из того же каталога
до сих пор это работает довольно хорошо.
источник