Як дізнатися, чи доступний порт на Ubuntu 8.04?


28

Чи є якась команда, яку я можу запустити від bash, яка підкаже, чи вже відкритий порт?

Відповіді:


37

Використовуйте "netstat", щоб перевірити поточний час за допомогою портів.

netstat -antp

Proto Recv-Q Send-Q Місцева адреса Іноземна адреса PID / Програма іноземної адреси
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / назва     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / названий     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / названий     
tcp 0 0 127.0.0.1:53 0.0.0.0:* СПИСОК 16297 / ім     

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

Усі хороші відповіді.

Однак ви не згадуєте, чи увійшли ви на відповідний комп'ютер. ; P

Якщо ні, то 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лише букви (не розв'язуйте імена - це робить швидше) та покажіть pроалетку, яка працює на прослуховування ( pпрацює лише в тому випадку, якщо ви root)

netstat -ulnp  

Показуйте uпорти dp, які lстираються, показуйте nлише шрифти (не вирішуйте імена - це робить швидше) та покажіть pроалетку, яка виконує прослуховування ( pпрацює лише в тому випадку, якщо ви root)

netstat -unp  

Показуйте uвідкриті порти dp, але їх не слухають, показуйте nлише букви (не розв’язуйте імена - це робить швидше) та показуйте, pщо слухає прослуховування ( pєдине працює, якщо ви root)

netstat -an

Показувати aвсі порти, які використовуються, показувати nлише букви - не вирішувати імена

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. Потім ви можете ввести вхід до кінця клієнта, і він повинен відображатися на сервері. Якщо це не так, вам потрібно переглянути спеціальні інструменти для системи та мережі.


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 drop for in bash script, напр .: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

поки що це працює досить добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.