Ну о физических портах вы наверное знаете - это такие "штуки" сзади системника - гнезда, к ним подключаются разные устройства (принтеры, мониторы, мышка,...).
Собственно при подключении к порту устройства образуется канал, по которому и передается информация.
Что-то подобное есть и в отношении сетевых портов.
Вы наверное слышали, что программа подключается к серверу (или обычному компьютеру)по такому-то айпи-адрессу на такой-то порт. Но вы незнаете как это, ведь сзади системника вроде невидно этих сетевых портов?
На самом деле сетевой порт - это некая абстракция, он существует на программном уровне. Так зачем же эти сетевые порты? Дело вот в чем: для того, что-бы одна программа на одном компьютере могла соединится со другой на другом компьютере, она должна знать адрес того компьютера (вернее ip-адрес). Казалось бы дело в шляпе - знаем ip адрес, "стучим", привет - привет и пошло... Но не так все просто. Нельзя забывать, что ее половинка на другом компе не одна, а общаться мы можем своего рода письмами (пакетами, слышали наверно такое..). Одна программа должна отравить другой пакет (письмо) в котором, указать адрес получателя (ip нужного компа). Теперь письмо прийдет туда, куда надо. Но кому оно адресовано? ведь как я выше писал программ много? Решение этого состоит в ведении порта. Это подобно тому, что в одном доме множество дверей, в каждой двери (порте) может быть свой человек (своя программа). Теперь, зная не только ip компа, но и порт на какой нужно слать пакеты "можна гарантировать" их успешную доставку тому, кто на нем "висит".
Когда говорят, что на нем кто-то висит, то это означает, что порт открыт. Если закрыт, то нет никого.
Не все порты открыты!!!
Смотря сколько на компе работающих сетевых программ, приблизительно столько и открытых портов, но некоторые программы (да большинство!) открывают для своих нужд несколько портов. Как же мы можем узнать какой порт открыт, а какой нет? Ответ такой: можно для него попробовать что-то послать, если нам ответят (пусть даже сообщением об ошибке), то значит, что там кто-то есть - т.е. порт открыт, если нет ответа, то "наверное" нету. По этому принципу и работают сканеры портов. Но почему наверное? А потому, что нам могут и не ответить, хотя и будут висеть на порту, и мы наивно будем думать, что там никого нету и порт закрыт. А почему нам не ответят? Например мы не сказали волшебного слова, т.е. не отправили его, или качество связи настолько плохое, что ответ просто не дошел (еще не дошел?). Вот почему при сканировании портов важно правильно подобрать время ожидания ответа! Когда пакет приходит на заданный ip-адрес - в заголовке считывается имя порта (точнее номер), на который тот и перенаправляется. Программа при помощи определенной апи-функций должна, как говорят опрашивать порт, т.е. проверять не пришел ли пакет.
Порты работают по протоколам TCP и UDP. Теперь о количестве портов. Каждый порт, точнее его своего рода имя - это число от 1 до 65535. Номера от 1 до 1023 "зарезервированы" под нужды системы. Конечно не все с 1 по 1023 открыты, но все-таки не рекомендуется (да и прав может не хватить) вешать на них свои программы.
К примеру краткий список портов (для протокола TCP): HTTP: 80 ICQ: 5190 telnet: 23 POP3: 110 SMTP: 25 FTP: 21 и 20 IMAP: 143 TFTP: 69 UDP SSH: 22 BitTorrent: 6969, 6881-6889 DNS: 53 UDP
Это значит, что к примеру порт 23 используется для пересылки команд управления ОС по протоколу telnet, 110 - для отправки почты по протоколу SMTP и т.п. Но это незначит что нельзя например использовать telnet на другом порту, просто 23 по-умолчанию зарезервирован для этой службы во всех ОС. А о незарезервированных нам предстоит только иногда гадать (если компютер удаленный), что же там (может что-то полезное, а может бэкдор...)
Для чего же определенные порты закреплены за определенными протоколами? Это было сделано для того, чтобы программа-отправитель и программа-получатель "общались на одном языке" и соответсвенно понимали друг друга. Это хорошо, если наша програма знает, что ее половинка на другом компе сидит на таком-то порту, она к ней коннектится и дальше никаких недоразумений недолжно выходить. А если таковой половинки нету? А есть другая? Как с ней говорить? Где та сидит? Вот для этого и было предназначено закрепление портов за определенными протоколами. Теперь одна программа на одном компьютере может соединится с другой, на другом компьюторе, но которую она незнает, но знает что та ее поймет (так как обе используют один и тот же протокол) и что та, которая ее поймет сидит на таком-то порту.
И наконец: для того, чтобы проверить какие порты открыты у вас, можно набрать в меню пуск -) выполнить: cmd.exe а в нем набрать netstat. А вообще то как правильно использовать netstat можно узнать, набрав в cmd.exe: netstat /?
З.Ы: для более подробного изучения принципов работы с портами, обращайтесь к документаци по сетевому программированию. З.Ы.ы: Пытался как мог, даже наверное много написал (прям художественный текст какой-то!). Замечания и дополнения приветствуются!
Copyright: bre@k special for hackzone.ru
|