что означает порт открыт
Как найти открытые и заблокированные порты TCP / UDP
В любом случае, к концу этой части вы не только узнаете, что представляют собой эти порты для всех, но и как проверить ваш компьютер на наличие открытых или закрытых портов.
Что такое сетевой порт?
Первое, что вы должны знать, это то, что порты, о которых мы здесь говорим, виртуальный, Это не имеет никакого отношения к физическим сетевым аппаратным портам на вашем маршрутизаторе, телевизоре, консолях или компьютерах. Порты — это просто способ для сетевого и аппаратного обеспечения вашей сети организовать информационный трафик.
Подумайте о зарезервированных полосах на дороге. Тротуар для пешеходов. Там может быть выделенная велосипедная дорожка. Автомобили и автобусы также имеют свои полосы движения. Порты выполняют ту же функцию. Один порт может использоваться для получения сообщений электронной почты, а другой — для запросов на передачу файлов или трафика веб-сайта.
Существует два общих типа портов, которые требуют краткого объяснения, прежде чем мы перейдем к проверке того, какие порты в вашей системе открыты, а какие нет.
Что такое порты TCP и UDP?
Два современных типа портов в современных сетях известны как порты TCP и UDP. Это протокол управления передачей и протокол дейтаграмм пользователя соответственно. Таким образом, эти два типа портов используют разные сетевые протоколы.
Которые вы можете считать отличительными наборами правил для того, как биты информации должны быть отправлены и получены. Оба типа портов построены на фундаментальном протокол Интернета (IP), который делает интернет и домашние сети, ну, Работа, Тем не менее, они подходят для различных применений.
Большая разница в том, что когда вы отправляете информацию по UDP, отправителю не нужно сначала устанавливать соединение с получателем перед началом разговора. Это похоже на отправку письма. Вы не знаете, получил ли ваше сообщение другое лицо, и у вас нет гарантии, что вы получите какой-либо отзыв.
TCP, с другой стороны, больше похож на телефонный звонок. Приемник должен «установить» соединение, и существует поток информации, пока кто-то намеренно не положит трубку.
Сообщения UDP обычно передаются по сети любому, кто прослушивает указанный порт UDP. Это делает его идеальным для сообщений служебного типа, которые касаются работы самой сети. Он также идеально подходит для потоковой передачи голоса по IP, онлайн-видеоигр и потокового вещания.
Почему? Эти приложения извлекают выгоду из низкой задержки UDP и постоянного потока информации, который не обязательно должен быть идеальным, чтобы быть полезным. В конце концов, небольшое искажение в вашем чате Skype гораздо менее важно, чем небольшое отставание.
TCP гораздо более распространен, чем UDP, и он гарантирует, что все данные будут получены без ошибок. Почти все, что не нуждается в особых преимуществах UDP, использует вместо этого TCP.
Какие порты обычно открыты по умолчанию?
Есть много портов. Номер порта может быть любым от 0 до 65535! Это не означает, что любое приложение может просто выбрать любой порт. Существуют установленные стандарты и диапазоны, которые помогают нам разобраться с шумом.
Порты 0-1023 связаны с некоторыми из наиболее важных и основных сетевых служб. Это имеет смысл, поскольку порты с меньшими номерами были назначены первыми. Например, протокол SMTP для электронной почты используется исключительно портом 25.
Порты 1024-49151 известны как «зарегистрированные порты» и назначаются важным общим службам, таким как OpenVPN на порт 1194 или Microsoft SQL на портах 1433 и 1434.
Остальные номера портов известны как «динамические» или «частные» порты. Эти порты не зарезервированы, и любой может использовать их в сети для поддержки определенного сервиса. Единственная проблема возникает, когда две или более службы в одной сети используют один и тот же порт.
Хотя невозможно перечислить все важные порты, эти общие порты полезно знать наизусть:
Поскольку существует много тысяч общих номеров портов, самый простой подход — запомнить диапазоны. Который скажет вам, если данный порт зарезервирован или нет. Благодаря Google вы также можете быстро узнать, какие службы используют определенный порт.
Найти открытые порты в Windows
Теперь, когда мы получили все базовые знания о портах TCP и UDP, пришло время приступить к поиску, какие порты открыты и используются на вашем компьютере.
Хорошей новостью является то, что в Windows встроена довольно полезная команда, которая покажет вам, какие порты в настоящее время используются на вашем компьютере различными приложениями и службами.
Сканирование для заблокированных портов
Это позволяет определить, какие порты используются и каким приложением, но не сообщает нам, какие порты активно блокируются брандмауэром Windows.
netsh firewall показать состояние
Это отображение заблокированных и открытых портов согласно конфигурации вашего брандмауэра Windows.
Вы увидите примечание об устаревании этой команды, но новая команда не показывает нам информацию, которую мы хотим. Так что на данный момент использование команды «show state» по-прежнему является самым быстрым и простым способом получения информации о порте.
Просто потому, что брандмауэр Windows не блокирует порт, это не означает, что ваш маршрутизатор или интернет-провайдер этого не делают. Поэтому последнее, что мы хотим сделать, это проверить, не происходит ли какая-либо внешняя блокировка.
Если в списке нет ни одного попадания, ничего не блокируется. Если некоторые порты указаны в списке, это означает, что они заблокированы. Если порт, не заблокированный Windows, отображается здесь, вы можете проверить свой маршрутизатор или отправить электронное письмо своему провайдеру, если переключение на другой порт не вариант.
Полезные приложения для отображения статуса вашего порта
В то время как командная строка является хорошим быстрым и грязным инструментом, есть более усовершенствованные сторонние приложения, которые могут помочь вам получить представление о конфигурации вашего порта. Два выделенных здесь являются просто популярными примерами.
SolarWinds требует, чтобы вы указали свое имя и данные, чтобы загрузить его, но вам решать, вносите ли вы свою реальную информацию в форму или нет. Мы опробовали несколько бесплатных инструментов, прежде чем остановиться на SolarWinds, но это был единственный инструмент, который работал правильно в Windows 10 и имел простой интерфейс.
Он также был единственным, кто не вызвал ложный положительный вирусный флаг. Одна из больших проблем программного обеспечения для сканирования портов заключается в том, что компании по обеспечению безопасности склонны рассматривать их как вредоносные программы. Поэтому большинство пользователей игнорируют любые предупреждения о вирусах, которые приходят с такими инструментами. Это проблема, потому что вы не можете определить разницу между ложным срабатыванием и настоящим вирусом в этих приложениях.
SolarWinds может поставляться с некоторыми прикрепленными строками, но на самом деле он работает так, как рекламируется, и прост в использовании.
Как вы, вероятно, можете сказать, это скорее веб-сайт, чем приложение. Это хороший первый порт захода, чтобы посмотреть, могут ли внешние данные пройти через ваш локальный порт или нет. Он автоматически определяет ваш IP-адрес, и все, что вам нужно сделать, это указать, какой порт для тестирования.
Затем он сообщит вам, заблокирован ли порт или нет, и вам нужно будет выяснить, находится ли блокировка на компьютере, маршрутизаторе или на уровне поставщика услуг.
Вывод
Для большинства пользователей порты — это не то, о чем вам нужно беспокоиться. Они управляются вашей операционной системой, приложениями и сетевым оборудованием.
Однако, когда что-то идет не так, хорошо иметь инструмент под рукой, который позволит вам найти открытые порты, чтобы выявить подозрительные действия или выяснить, где именно ваша драгоценная информация попадает в кирпичную стену.
Что такое сетевой порт в компьютере и сколько их бывает: отвечает Бородач
Всем привет! В интернете полно статей про сетевые порты, но очень мало где используется нормальный человеческий язык. Именно поэтому я решил написать свою подробную статью по разбору этой темы. Давайте для начала ответим на вопрос – а что же такое сетевой порт в компьютере и информатике в целом.
Определение
Лучше всего расскажу на примере. Представим себе, что у вас есть компьютер, который уже подключен к интернету. У данного компьютера есть свой IP адрес, который определяет его среди множества других сетевых устройств, находящихся в интернет пространстве.
Если кабель от провайдера идёт на компьютер напрямую, то ему присваивается внешний IP адрес. Если же подключение идет через роутер, то внешний IP находится именно у данного интернет-центра. Данный IP нужен для того, чтобы пакеты доходили именно до этого компьютера.
Но тут встаёт небольшая проблема, когда пакет информации доходит, компьютер или сервер не понимает – в каком приложении его открывать?! Вот за данную функцию частично и отвечают порты. Например, пользователь сделал запрос в интернете на определенный сайт. Далее пакет данных доходит до сервера, на котором работает одновременно много системных служб и программ.
В запросе от пользователя также одновременно прописывается информация о порте. Тогда сервер сразу понимает, что запрос был отправлен с целью получения информации о какой-нибудь Web-странице. И сервер отправляет ответ с нужной информацией.
Если говорить грубо, то IP (в нашем примере) – это адрес дома. Но когда почтальон приходит к дому, он не знает в какую квартиру отнести письмо. И вот порт – это и есть номер квартиры. На данный момент существует определенное число портов – 65 535. Вы можете заметить аналогию с многоквартирным домом, по сути в каждом доме есть определенное количество квартир.
Некоторые порты компьютера могут быть открыты или закрыты в зависимости от настроек системы. Также некоторые приложения открывают свои порты или используют смежные. Также не забываем, что для передачи информации по сети используется модель TCP/IP или UDP. Ещё один пример, который сможет более точно объяснить – для чего же нужны сетевые порты на компьютере.
Вася решил завести у себя на компьютере свой Web-сайт. После верстки он все же решил загрузить его на свой компьютер. Конечно, он мог бы арендовать сервер, но он решил сэкономить. Интернет у него подключен напрямую к системному блоку. Теперь вопрос знатокам: при запросе из интернета – как компьютер будет понимать, что нужно отдавать по запросу именно страницы сайта, а не данные общих папок или ответ от какого-нибудь запущенного приложения?
Вот тут и будет вступать в силу порт. В данном случае чаще всего используется номера: 80 или 8080. Именно поэтому Вася должен на своем компьютере открыть локальный порт для своего сайта. Конечно объяснение было немного грубое, и все там обстоит куда сложнее, но моя задача была разъяснить именно суть и назначение порта. Потому что почему-то нигде толкового объяснения нет, а многие оперируют сложными техническими понятиями.
Номера портов
И так товарищ, ты теперь почти просветлел и понял – что же такое порт. Теперь же давайте поговорим про понятие «номер порта». Как я уже и говорил, в каждом компьютере, сервере, маршрутизаторе существует ровно 65 535 портов. Конечно, используются они не все и есть свободные «адреса».
С 0 до 1023-го – это зарезервированные «квартиры» для систем как Windows, так и Linux. Насчет Mac OS сказать не могу, с данной ОС не работал. Далее с 1024 по 49151 идут свободно используемые входы. То есть их могут использовать отдельные приложения, утилиты или даже системные службы. Некоторые программы могут одновременно использовать один и тот же номер.
Остальные порты, можно сказать – находятся в свободном полете и могут использоваться или не использоваться по усмотрению ОС или пользователя. Запоминать тот или иной номер бессмысленно, потому что их очень и очень много. Например, очень часто для игр на домашних роутерах нужно открыть дополнительные номера. Но запоминать, к какой именно игре используется тот или иной номер, смысла нет.
Но со временем за определенными портами закрепились отведенные службы. Вот пример нескольких из них:
Чаще всего обычный пользователь не задумывается о пробросе, открытии или закрытии портов. Этим занимается сама операционная система, а в частности Брандмауер. Также при установке приложений, игр и утилит, которые используют интернет или сетевое подключения, они сами прописывают при инсталляции настройки по использованию тех или иных входных номеров. Некоторые программы используют сразу несколько.
ПРИМЕЧАНИЕ! Портовая конфигурация также есть у роутеров и провайдера.
Просмотр открытых и закрытых портов
Чтобы посмотреть все входные номера, которые используются, заблокированы или ждут своей очереди – можно через консоль. В Windows достаточно зайти в командную строку: для этого нажимаем на кнопки и R и прописываем команду «cmd». Далее нужно будет ввести:
В Kali Linux прописываем другую команду:
less /usr/share/nmap/nmap-services
Для удобства я все же советую использовать удобную программку «Process and port analyzer». Она в более удобном виде выводит все задействованный список портов на данном устройстве. Вы можете посмотреть зарезервированные, свободные и используемые номера.
Таблица портов
Открытие и закрытие
Как я уже и говорил ранее – данную функцию выполняет сама система или установленные программы. Но вы сами можете изменять или добавлять некоторые правила. По сути вам нужно указать сетевой порт, а также приложение или программу, для которой это правило будет действовать. Если же вы будете производить настройку на роутере, то нужно будет указывать IP адрес устройства переадресации.
Для начала вам нужно определиться с тем – какой «вход» вы хотите открыть и для чего. Номер и название приложение вы можете посмотреть в том PDF файле, который я прикрепил выше. Покажу на примере игры World of Warcraft. Будем открывать официально зарезервированный номерной «вход» – 3724. Вообще в играх чаще всего используется именно UDP порт, который работает в потоковой передаче данных. Но вам нужно смотреть именно в столбец с портом: там будет подсказка, какой протокол надо использовать в выбранном приложении (TCP или UDP).
ПРИМЕЧАНИЕ! Таким образом вы можете закрыть определенный «вход», выбрав «Блокировать подключение».
Проброс
Открытие и проброс портов – это разные вещи, хоть некоторые их и путают. Когда вы открываете какой-то «вход», то вы делаете это на конкретном устройстве – например, на своём компьютере. Проброс портов – обычно делается на сетевом шлюзе, который из внешней сети принимает какой-то запрос от пользователя. Далее он или разрешает данный запрос, или запрещает. Чаще всего если порт не проброшен, то идет точный запрет, и пользователь не получит ответа.
Например, у вас дома стоит система видеонаблюдения. Сеть камер, подключенных к видеорегистратору, который в свою очередь привязан к интернету с помощью роутера. Камера кстати может быть вообще одна и подключена напрямую к маршрутизатору.
Чтобы просматривать камеру через интернет, отдыхая на Бали или во Вьетнаме, нужно пробросить порт. После проброса, чтобы попасть на камеру, нужно будет зайти в браузер, ввести внешний IP адрес вместе с проброшенным номером, и тогда можно увидеть изображение с камеры.
По пробросу у нас уже есть отдельные инструкции на сайте:
Если у вас ещё остались вопрос или есть дополнения, то пишите в комментариях.
Как проверить, открыт ли порт, командой telnet
Обмен данными по локальной сети или через интернет осуществляется путем подключения друг к другу двух компьютеров. Чтобы получить данные с удаленного сервера, требуется соблюсти несколько условий – наличие IP-адреса у источника и получателя, выбор конкретного протокола приема-передачи и открытые порты на обоих компьютерах.
Что такое порт компьютера
Порт – это виртуальное дополнение к сетевому адресу, которое позволяет разделить запросы разных приложений и обрабатывать их автономно. Часть постоянно занята системными службами Windows или другой операционки, остальные свободны для использования прикладными программами, в том числе запускаемыми на удаленных серверах.
Перед подключением к какому-либо порту рекомендуется проверить, свободен ли он. Если нет, то операционная система выдаст ошибку, и соединение прервется. Многие программы делают проверку в автоматическом режиме и сами пытаются менять номера в поиске незанятого подключения. Но в ряде случаев это требуется сделать вручную, например, при отладке собственного кода.
Как проверить, открыт ли порт для подключения
Порты присутствуют у всех сетевых устройств, включая маршрутизаторы и роутеры, поэтому при анализе среды важно понимать, какой именно узел проверяется. На этом отчасти основаны системы безопасности, когда ради блокировки вероятных хакерских атак закрываются все свободные сокеты и открываются только те, которые используются корпоративным софтом.
Существует три основных способа проверки открытых портов:
Выбор решения зависит от задач. Так, если требуется открыть доступ к своему компьютеру извне, можно воспользоваться сервисами 2ip.ru или portscan.ru. При локальных работах удобнее приложения типа Portforward Network Utilities или штатная утилита TELNET. Она поставляется в «стандартной» сборке Windows и доступна для запуска в консоли CMD.
Перечень открытых портов на локальном компьютере
Открытый порт на домашнем или рабочем компьютере – это фактически «дыра» в безопасности и риски утраты контроля над ситуацией. Именно через них проникают трояны и иные вирусы, которые имеют цель предоставить злоумышленнику возможность удаленного подключения к ПК без разрешения владельца.
Проверить занятые порты легко:
В консоли отобразится перечень занятых портов с указанием, какое приложение или служба ими «распоряжается». Такой вариант проверки интересен тем, что он дает объективную картину. Если рассчитывать только на онлайн-сервисы, иногда создается впечатление, что открытых портов нет. Эффект создается из-за блокировки внешних запросов брандмауэром Windows или другим ПО.
Если хочется изучить список на предмет «посторонних» программ, его лучше выгрузить в файл при помощи команды netstat –a >имя.txt. По умолчанию список сохраняется в каталоге пользователя, в аккаунте которого происходил запуск утилиты (типа C:\\Пользователи\User\). При желании перед запуском утилиты можно перейти в корень диска командой cd c:\.
Просмотр открытых портов на удаленном компьютере
При взаимодействии с удаленным сервером используется другая утилита – TELNET. В Windows она по умолчанию отключена, потому что не относится к пользовательским приложениям. Перед первым запуском придется провести «активацию». Существует два способа включения – в консоли или через графический интерфейс.
Активация заключается во вводе специальной команды:
Она сработает только при запуске консоли с правами администратора. Схема открытия приложения несколько иная:
Если пользователь предпочитает управлять компьютером через графический интерфейс, нужно запустить панель управления, а в ней утилиту «Удаление программы». В открывшемся окне нужно перейти в раздел «Включение или отключение компонентов Windows», далее в общем списке найти строку «Telnet», поставить в ней галочку и нажать кнопку ОК. Все, служба активирована и готова к использованию (даже в консоли).
Хост – это домен или его IP-адрес, порт – виртуальное дополнение для образования сокета, опции же позволяют менять режим подключения. Их основные варианты:
Простейший вариант проверки открытых портов – это ввод команды без опций:
Если на экран будет выведено сообщение «Сбой подключения», порт закрыт, нужно подбирать другой номер. Если порт открыт, пользователь увидит пустой экран или приглашение со стороны сервера ввести логин и пароль.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как проверить открытые порты на своём компьютере. Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT
Почему важно знать, какие порты открыты на компьютере?
Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.
Если ваш компьютер заражён вредоносным программным обеспечением, таким как троян, бэкдор (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения. Хотя могут быть варианты, например, многие бэкдоры подключаются к компьютеру злоумышленника и ожидают команд — в этом случае правильнее говорить не об открытом порте, а об установленном соединении. Это распространённый способ поведения вредоносного ПО, поскольку в данном случае не требуется, чтобы у жертвы был белый IP (что для домашних компьютеров является редкостью). Поэтому важно проверять открытые порты и установленные сетевые соединения. Конечно, установленное соединение означает наличие открытого порта, но с технической точки зрения это всё-таки разные вещи.
Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.
Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.
Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.
Как проверить открытые порты в Windows
В Windows есть команда netstat, которая отображает статистику протокола и текущих сетевых подключений TCP/IP.
Используя команду со следующими ключами, можно посмотреть информацию о всех подключениях и прослушиваемых портах в Windows:
Как с помощью PowerShell проверить открытые порты в Windows
Get-NetTCPConnection — это PowerShell-эквивалент NETSTAT, запуск команды без опций возвращает результат аналогичный netstat (но только по TCP портам и соединениям!).
Чтобы вывести список открытых портов, используйте опцию -State со значением Listen:
Командлет Get-NetUDPEndpoint получает текущую статистику для конечной точки UDP. Командлет возвращает свойства конечной точки UDP, например локальные и удалённые порты UDP. Если вы не укажете никаких параметров, командлет получит статистику для всех конечных точек UDP. Get-NetUDPEndpoint запущенный без опций вернёт локальный адрес и локальный порт.
А следующая команда покажет открытые на всех сетевых интерфейсах UDP порты:
Связанные статьи:
Как в Windows узнать, какая программа прослушивает порт (с помощью PowerShell)
В этом примере будет получено имя процесса, связанного с каждым открытым портом:
Эта команда покажет все процессы связанные с любой сетевой активностью (открытые порты, а также установленные соединения и другие статусы):
Чтобы узнать, какая именно программа прослушивает определённый порт, используйте следующий набор команд:
Замените «80» в первой строке на порт, который вас интересует.
Чтобы просмотреть идентификатор процесса-владельца используемого порта UDP, запустите команду:
Используйте следующую команду, чтобы отобразить имя процесса, открывшего UDP порт:
Как в Windows узнать, какая программа прослушивает порт (используя CMD)
Открытых для прослушивания портов может оказаться достаточно много и обычно они используются легитимными программами. Поэтому при анализе полученных данных также важно знать, какая именно служба прослушивает определённый порт.
Для поиска службы, можно добавить к команде NETSTAT опцию -b, которая означает показать исполнимый файл, прослушивающий порт:
Также имеется альтернативный способ определения исполнимого файла, привязанного к порту. Для него откройте Командную строку Windows. Для этого нажмите сочетание клавиш Win+x, там выберите Windows PowerShell (Администратор). В открывшемся окне введите:
чтобы переключиться на Windows Console Host (обычную командную строку).
Там запустите команду вида:
Эта команда найдёт службы, которые прослушивают 80 порт. Чтобы найти информацию о другом порте, замените в команде цифру 80 на интересующий вас порт.
Пример вывода в моём случае:
Запись 0.0.0.0:80 означает, порт 80 для любых IPv4 адресов прослушивает служба httpd.exe (веб-сервер Apache). А запись [::]:80 — означает, что порт 80 для любых IPv6 адресов прослушивает та же самая служба httpd.exe (веб-сервер Apache). Мы ещё вернёмся к более подробному анализу данных далее в этой статье.
Менять порт в длинной команде не всегда удобно, поэтому рекомендую создать текстовый файл с именем port.bat, в этот файл скопируйте:
Сохраните и закройте этот файл.
Теперь в Windows PowerShell или в командной строке Windows с помощью команды cd перейдите в папку, куда вы сохранили файл. Например, я его сохранил в папку C:\Users\Alex\Documents\, тогда для перехода туда я выполняю:
Теперь запустите файл командой вида:
Где ПОРТ замените на интересующий вас порт, например, меня интересует порт 80, тогда:
Вновь получаю аналогичный результат.
Если у вас множество портов прослушивает процесс svchost.exe, то чтобы разобраться, какие именно это службы, смотрите статью «Почему svchost.exe прослушивает много портов? Как узнать, какие именно программы открыли порты».
Как проверить открытые порты в Linux. Как узнать, какая служба прослушивает порт
Для Linux тоже есть команда netstat, но она, вроде как, теперь считается устаревшей и на её замену рекомендуется команда ss. Показываемая информация у ss и netstat очень похожи. Даже основные опции идентичны.
Итак, для вывода открытых портов TCP и UDP протоколов вместе с показом процессов, которые их прослушивают, используется команда:
Чтобы вывести список установленных соединений для портов TCP и UDP, используйте команду:
Больше опций, а также больше способов найти, какие порты прослушиваются, смотрите в статье «4 способа узнать, какие порты прослушиваются в Linux».
Что означает вывод netstat и ss
Далее мы научимся понимать, что именно выводит netstat. Но для полного понимания нам нужно изучить немного теории — совсем кратко. Я расскажу только о том, что нам действительно понадобиться.
TCP и UDP
TCP и UDP это протоколы транспортного уровня. Самое главное что вам нужно о них знать: любой из них может использоваться для передачи информации.
Кстати, про протокол TCP вы практически наверняка слышали, по крайней мере должны были встречать запись TCP/IP — эта связка протоколов очень важна для Интернета. Протокол IP отвечает за то, куда отправлять данные, а TCP отвечает за непосредственную передачу данных и проверку их целостности.
Работу протокола TCP можно представить как создание соединения между двумя компьютерами, по этому соединению передаются данные. Внутри этого соединения данные проверяются на предмет повреждения — если какая-то часть повреждена, то она отправляется повторно.
Протокол UDP тоже передаёт данные, но вместо того, чтобы создавать устойчивое соединение, внутри которого данные проверяются на целостность, он только отправляет пакет данных на определённый адрес, при этом не осуществляется контроль, был ли покет доставлен без повреждений и был ли доставлен вообще. По сути это и есть главное отличие между этими протоколами.
LISTENING, ESTABLISHED, CLOSE_WAIT и другие состояния
Как вы можете увидеть в выводе команды netstat для протокола TCP доступны разные варианты состояний.
Самые популярные из них это LISTENING — означает, что порт прослушивает запущенное на данном компьютере приложение, что оно готово принять соединение, например, от другого компьютера или от другой службы, запущенной на этом же компьютере. Также применяются термины «открытый порт», «привязка порта».
ESTABLISHED означает уже установленное соединение. Пример такого соединения: веб-браузер инициализировал загрузку страницы сайта и пока данные передаются по этому соединению, у этого соединения статус ESTABLISHED.
Имеются и другие виды состояний, но для наших целей они не очень важны. По большому счёту нас интересует только LISTENING, так как это означает открытые порты на нашем компьютере и возможность подключаться к нему. Также нам важно состояние ESTABLISHED, поскольку оно означает, что данные уже передаются по сетевому соединению.
UDP и LISTENING
Про UDP уже сказано чуть выше, что этот протокол не создаёт соединений в том смысле, как это делает TCP. Поэтому для этого протокола нет никаких состояний соединения — это просто неприменимо к нему. По этой причине в графе Состояние для него никогда не пишется LISTENING. Но значит ли это, что UDP порт не может быть прослушиваемым? Нет! Порт UDP также может быть прослушиваемым и доступным для соединений. В том числе этот порт может использоваться вирусами и злоумышленниками, поэтому эти порты также подлежат исследованию.
Пример анализа открытых портов
Я начну с анализа открытых портов на Linux. Просто потому, что мне так проще, а затем мы постепенно перейдём изучить открытые порты на Windows.
Пример информации об открытых портах, полученных командой:
Пример прослушиваемых портов на Linux:
В выводимых данных имеются следующие поля:
Рассмотрим, что означает запись 127.0.0.1:9050: она говорит о том, что прослушивается порт 9050. Причём он прослушивается только для IP адреса 127.0.0.1. Адрес 127.0.0.1 относится к так называемым Loopback, то есть это замыкающийся на себя, закольцованный адрес. Сетевой интерфейс с этим адресом называется петлевым. Пакеты, которые отправляются с компьютера на этот адрес, приходят на этот же самый компьютер (точнее говоря, они никуда даже не уходят). Доступ к этому адресу может иметь только служба, работающая на этом же самом компьютере. Отсюда важное следствие: хотя порт 9050 прослушивается, никто другой не может к нему подключиться из любой сети. Это же относится и к адресам из диапазона ::1/128 — это такие же адреса, но уже для IPv6, в IPv6 аналог для 127.0.0.1 это ::1 (тоже часто можно видеть в выводимой информации).
Смотрите также:
Если прослушиваются какие-либо адреса из локальных
то к таким портам могут подключиться только компьютеры, расположенные в этих самых локальных сетях (если не настроить особым образом маршрутизацию или проброску портов (port forwarding)).
Для вывода прослушиваемых портов и уже установленных сетевых подключений используйте следующую команду:
Звёздочка (*) вместо адреса или порта
Мы можем увидеть записи вроде *:80 или даже *:*
Здесь звёздочка означает любой адрес или любой порт. Например, *:80 в колонке Local Address:Port (Локальный адрес:Порт) означает, что прослушивается 80 порт сразу на всех сетевых интерфейсах, доступных в данной системе. То есть служба ответит на запрос к 80 порту откуда бы он не пришёл: из локальной сети, из глобальной сети (если есть прямое соединение и интерфейс с белым IP) или с закольцованного адреса — это неважно, служба всё равно примет это соединение.
Кстати, служба может прослушивать порт в соответствии со следующими правилами:
То есть порт должен в любом случае быть указан, поэтому для Local Address:Port (Локальный адрес:Порт) допустима запись *:80, но запись вида *:* никогда не встретится в этом столбце.
Для Peer Address:Port (Удалённый адрес:Порт) запись *:* означает, что принимаются соединения от любого IP, отправленные с любого порта.
Кстати, просто для справки: если ваш компьютер подключается к веб сайту, то веб сайты обычно работают на 80 и 443 портах. Следовательно, веб браузер подключается именно к 80 порту (или 443, если это безопасное HTTPS соединение). Но на вашем компьютере открывается новое соединение на каком угодно, но только не на 80 и 443 портах — обычно используются порты с номерами >30000, например, на вашем компьютере может быть открыто исходящее соединение с портом 42063 и оно будет адресовано к 80 порту какого-либо веб сервера.
Прослушиваемые порты IPv4 и IPv6 адресов в Linux
В Linux у программ netstat и ss имеется особенность вывода информации о прослушиваемых портах, когда прослушиваются одновременно IPv4 и IPv6 адреса — выводится информация только об IPv6 адресе! Возможно это связано с какими-то глубинными особенностями реализации ядра Linux, но в Windows, например, есть чёткое разделение и если служба одновременно прослушивает порт на IPv4 и IPv6 адресах, то информация об этой службе выводится два раза — пример этого почти в самом начале статьи, где мы ищем, какая служба прослушивает 80-й порт и в найденной информации нам дважды показана служба httpd.
Что означает 0.0.0.0 в netstat. Различные виды нотаций в netstat и ss
0.0.0.0 — это самый первый IP адрес. Но он относится к IP специального назначения (как например 127.0.0.1) и выполняет разные функции.
Обозначение 0.0.0.0 может иметь разное значение в зависимости от того, где используется. Когда говорят о прослушиваемых портах, это обозначение в Linux символизирует заполнитель, то есть означает «любой IP адрес».
В программе netstat также используется запись 0.0.0.0:* которая также обозначает «любой IPv4 адрес с любого порта».
Но в netstat для обозначения «любой IPv6 адрес с любого порта» используется . *
Помните об этих различиях, чтобы не запутаться. А также помните о том, что если показано, что прослушивается протокол tcp6 (IPv6), то одновременно может прослушиваться порт и на tcp (IPv4) — при этом данные в выводимой информации отсутствуют!
В Windows в качестве Local Address (Локального адреса), когда прослушивается любой IP адрес на определённом порту, используется запись вида 0.0.0.0:80 (в этом примере прослушивается любой IP адрес, доступный в системе, на 80 порту). Для IPv6 адресов в этом случае используется запись вида [::]:80.
В качестве внешнего адреса, когда доступно подключения с любого IP и с любого порта, для TCP протокола пишется 0.0.0.0:0, а для UDP протокола в этих же условиях пишется *:*. Что тоже не особо логично и сбивает с толку. Точнее говоря такое различие в обозначениях вытекает из разницы протоколов TCP и UDP.
Если информация относится к IPv6, то для TCP когда имеется ввиду любой адрес на любом порту, используется запись вида [::]:0. А для UDP используются одинаковые нотации как для IP, так и для IPv6, то есть *:*
Нужно помнить, что некоторые из этих обозначений пересекаются с нотациями из Linux, где они имеют своё собственное значение.
Чтобы чуть облегчить жизнь, я составил такую табличку, которую можно использовать в качестве шпаргалки:
Определённый локальный IPv4 адрес на определённом порту
Любой локальный IPv4 адрес на определённом порту
Определённый локальный IPv6 адрес на определённом порту
Любой локальный IPv6 адрес на определённом порту
Любой внешний IPv4 адрес на любом порту
Любой внешний IPv6 адрес на любом порту