Відповіді:
Використовуйте "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 / ім
Це (netstat) - найшвидше рішення ...
netstat -lnt
... але це дає вам більше контролю (ціною швидкості (іноді великої швидкості)) ...
lsof -n -i -a -u www-data
Наведений вище приклад, наприклад, показує, що всі порти TCP відкриті та перебувають у LISTEN
стані, а AND ( -a
) належить користувачеві Apache ( www-data
).
Усі хороші відповіді.
Однак ви не згадуєте, чи увійшли ви на відповідний комп'ютер. ; P
Якщо ні, то nmap - ваш друг.
для початку спробуйте:
nmap -O
target
amap - це також хороший вибір, який також намагатиметься відгадати серверне програмне забезпечення, захоплюючи банерні сторінки.
для початку спробуйте:
amap
target
1-6000
Спробуйте
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)
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
щоб побачити, чи є розетки, або локальні, або віддалені, або прослуховування (локальне), або підключені (локальні або віддалені) для будь-якого хоста / інтерфейсу
Ви не згадуєте, який протокол ви хочете використовувати, наприклад, 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. Потім ви можете ввести вхід до кінця клієнта, і він повинен відображатися на сервері. Якщо це не так, вам потрібно переглянути спеціальні інструменти для системи та мережі.
Цей одноклапник отримає вам список усіх 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
у вашому шляху чи у вашому проекті
#!/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
поки що це працює досить добре.