Обнаружение сервера
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Обнаружение сервера - 2010-10-04 16:03:48.520000
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Здравствуйте! Возникла такая серьезная проблема: Имеется сеть на 2500 компьютеров… В этой сети появился сервер, который раздает IP адреса и портит нашу сеть конфликтом IP адресов. Т.е. этого сервера быть не должно! Подскажите кто знает, как можно выявить IP этого сервера с помощью программы delphi (нужно на ней написать программу) Я предполагаю что нужно послать широковещательный запрос на получение IP(и когда сервер ответит-значит там он и сидит) Как должен выглядеть этот широковещательный запрос? Подскажите пожалуйста кто знает?:)!
|
|
|
RE: Обнаружение сервера - 2010-10-04 16:23:08.826666
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Тебе надо с извращением как по учебной программе или по человечески. Я делфи не знаю, но знаю как по человечески Каманда ipconfig /all выдает в строке DHCP-серверы адрес сервера выдавшего ip компу.
|
|
|
RE: Обнаружение сервера - 2010-10-04 16:42:21.540000
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Это все понятно… Дело в том, что эта команда не применима на моем компьютере, т.к у меня нет конфликта IP адресов, но этот DHCP в сетке есть, и нужно его найти…
|
|
|
RE: Обнаружение сервера - 2010-10-04 17:08:46
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Давай тогда рассуждать. DHCP выдает IP по маске. Раз так много компов то и маска большая, например 192.168.х.х получается. DHCP это программа которая может быть где угодно, но по правилам её IP самый первый в маске и выдавать она начнет по возрастанию. Таким образом мы имеем: два DHCP сервера адреса которых по две стороны от твоего собственного, если бы это было не так то ты бы получал два IP и был бы конфликт. Таким образом надо проверять адреса выше твоего. А что же отправлять? Да простой пакет syn-ask на порт 53 это порт DHCP сервера. Если открыт и ответ, то это наш сервер. З.Ы. сразу говорю я мог что нить напутать)
|
|
|
RE: Обнаружение сервера - 2010-10-05 08:13:29.010000
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Логично! Но мой IP тоже раздается DHCP, там система немного другая. А порт сервера 67! А можно подробнее про syn-ask?:) Потому что я пытался послать DHCPDISCOVER
|
|
|
RE: Обнаружение сервера - 2010-10-05 08:36:36.723333
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Вот!
|
|
|
RE: Обнаружение сервера - 2010-10-05 09:13:35.030000
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Так не путаем. 67 это UDP порт DHCP, а 53 это TCP порт DHCP по умолчанию. Что использовать решать тебе и как оно пашет с точки зрения программирования на делфи. Теперь про syn-ask. Такой запрос возможен как правило только по TCP. Это обычный запрос на коннект. Т.е. пытаемся создать соединение (это в API сокетов обычный connect) и проверям ответ. Если есть ответ с 53 порта и в ответе по логике будет что-то про DHCP. Я не компал в эту сторону, но материала должно быть в инете достаточно по определению системных служб. Возможно твой запрос и быстрей будет, только я не знаю какой ждать ответ от такого сервера по UDP. Вот тема с ссылками на исходники http://forum.sources.ru/index.php?showtopic=163399&hl= может что подберешь.
|
|
|
RE: Обнаружение сервера - 2010-10-05 11:47:26.853333
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Спасибо за совет и ссылки, это все интересно конечно, но не то…:( Нужен DHCP запрос для получения DHCP ответа, либо определить активность этого DHCP сервера…
|
|
|
RE: Обнаружение сервера - 2010-10-05 12:02:37.373333
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Ну раз косвенные методы не устраивают, то все что я могу это цитировать, а ваше дело исполнить и если не пашет выложить исходник для проверки ошибок. Вначале клиент выполняет широковещательный запрос по всей физической сети с целью обнаружить доступные DHCP-серверы. Он отправляет сообщение типа DHCPDISCOVER, при этом в качестве IP-адреса источника указывается 0.0.0.0 (так как компьютер ещё не имеет собственного IP-адреса), а в качестве адреса назначения — широковещательный адрес 255.255.255.255.
Клиент заполняет несколько полей сообщения начальными значениями:
В поле xid помещается уникальный идентификатор транзакции, который позволяет отличать данный процесс получения IP-адреса от других, протекающих в то же время.
В поле chaddr помещается аппаратный адрес (MAC-адрес) клиента.
В поле опций указывается последний известный клиенту IP-адрес. В данном примере это 192.168.1.100. Это необязательно и может быть проигнорировано сервером.
Сообщение DHCPDISCOVER может быть распространено за пределы локальной физической сети при помощи специально настроенных агентов ретрансляции DHCP, перенаправляющих поступающие от клиентов сообщения DHCP серверам в других подсетях.
|
|
|
RE: Обнаружение сервера - 2010-10-05 12:32:22.016666
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
… ибо читал я это и возникла у меня страшная идея создания страшной программы… Ну и на том спасибо!:) Я делаю так: for n:=0 to ListBox2.Count-1 do begin \\формирование списка IP адресов TcpClient1.RemoteHost:=ListBox2.Items[n]; \\подключение к каждому IP TcpClient1.RemotePort:='53'; \\порт 53 при использовании Tcp TcpClient1.Active:=True; \\ подключаемся end; И вы знаете, подключается (не удивительно:) ) И теперь стоит задача послать DHCP запрос для получения ответа… (вот здесь и вся загвоздка, как его написать и послать) А саму систему работы взаимодействия клиент-сервер я знаю… А как реализовать запрос на delphi-загадка!:)
|
|
|
RE: Обнаружение сервера - 2010-10-05 12:38:11.860000
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
… ибо читал я это и возникла у меня страшная идея создания страшной программы… Ну и на том спасибо!:) Я делаю так: for n:=0 to ListBox2.Count-1 do begin \\формирование списка IP адресов TcpClient1.RemoteHost:=ListBox2.Items[n]; \\подключение к каждому IP TcpClient1.RemotePort:='53'; \\порт 53 при использовании Tcp TcpClient1.Active:=True; \\ подключаемся end; И вы знаете, подключается (не удивительно:) ) И теперь стоит задача послать DHCP запрос для получения ответа… (вот здесь и вся загвоздка, как его написать и послать) А саму систему работы взаимодействия клиент-сервер я знаю… А как реализовать запрос на delphi-загадка!:)
|
|
|
RE: Обнаружение сервера - 2010-10-06 08:49:29.533333
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Люди! Кто нибудь сталкивался с подобной задачей? Подскажите!?:)
|
|
|
RE: Обнаружение сервера - 2010-10-06 10:29:21.633333
|
|
|
namepunk
Сообщений: 2732
Оценки: 184
Присоединился: 2009-09-15 13:35:36.866666
|
Блин, ну что тут подсказывать…Тоже мне сверхзадача. Снифер используй…WireShark например. В правилах поставишь фильтр udp.port=68. Возьмешь на своем хосте виртуалку, сетевуху на ней бриджом. На сетевухе - автоматическое получение ip, а с основного хоста - слушаешь. Dhcp - discover запросы широковещательные так что ответят все. И эти ответы ты увидишь wireshark'ом. зы а про 53 порт забудь он для DNS (как tcp так и udp), попутал ltonid, и на старуху как говориться…
|
|
|
RE: Обнаружение сервера - 2010-10-06 17:03:59.316666
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Точно, извиняюсь)) http://scit.boom.ru/Andre_S/7_Protocol.htm - хорошая статья. Короче походу ситуация такая же плачевная как у меня была со службыми и придется тебе самому допирать до того как написать запрос http://msdn.microsoft.com/en-us/library/cc227304(PROT.13).aspx - там ссылка на RFC - вперед с песней)
|
|
|
RE: Обнаружение сервера - 2010-10-08 08:04:26.423333
|
|
|
ivan_90
Сообщений: 10
Оценки: 0
Присоединился: 2010-10-04 15:45:42.770000
|
Похоже на то:( Ну да ладно! Спасибо!:)
|
|
|
|
|