versen Опубликовано 1 июня, 2011 · Жалоба ограниченным перебором. на русской винде используются cp866, cp1251 и utf16. Если у кого-нибудь будет немецкая винда, то вы увидете мусор вместо их национальных символов, предполагая что используется cp866 Понял. thanks Теперь по dhcp серверу, вопрос, скорее к Ivan_83: в request_loop: в строку logger("Thread $tid: Got a packet src = $ipaddr:$port length = ".length($buf)); добавил $dhcpreq->xid()."\t". logger($dhcpreq->xid()."\t"."Thread $tid: Got a packet src = $ipaddr:$port length = ".length($buf)); и в логе нашел такую запись: [01/Jun/2011 12:35:15] 4055216833 DHCPTYPE = 3;HOST_NAME = microsof-f284e2 [01/Jun/2011 12:35:15] 4055216833 Thread 0: Got a packet src = 172.16.16.33:68 length = 339 [01/Jun/2011 12:35:15] 4055216833 Thread 2: Got a packet src = 172.16.16.252:68 length = 339 [01/Jun/2011 12:35:15] 4055216833 DHCPTYPE = 3;HOST_NAME = microsof-f284e2 [01/Jun/2011 12:35:15] 4055216833 sw_ip = 172.16.16.166; port = 27 [01/Jun/2011 12:35:15] 4055216833 sw_ip = 172.16.16.252; port = 19 [01/Jun/2011 12:35:15] 4055216833 DHCPTYPE = 3;HOST_NAME = microsof-f284e2 [01/Jun/2011 12:35:15] 4055216833 sw_ip = 172.16.16.33; port = 25 [01/Jun/2011 12:35:15] 4055216833 Sending response to = 172.16.16.33:67 length = 300 [01/Jun/2011 12:35:15] 4055216833 Thread 0: the code took: 0.00656295 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) [01/Jun/2011 12:35:15] 4055216833 Sending response to = 172.16.16.252:67 length = 310 [01/Jun/2011 12:35:15] 4055216833 Thread 2: the code took: 0.00982499 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) [01/Jun/2011 12:35:15] 4055216833 Sending response to = 172.16.16.166:67 length = 300 [01/Jun/2011 12:35:15] 4055216833 Thread 8: the code took: 0.014338 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) Непонятно, что за глюк.. Почему в трех разных нитях один и тот же xid? Хотя параметры, к примеру, свитч_порт, которые берутся из того же $dhcpreq, у каждой нити получились свои? А вот $dhcpreq->getOptionValue(DHO_DHCP_MESSAGE_TYPE()) и $dhcpreq->getOptionRaw(DHO_HOST_NAME()) одинаковые. !?!? Перенес строку my ($buf, $fromaddr, $dhcpreq); # recv data чуть ниже в while( $RUNNING == 1 ) { my ($buf, $fromaddr, $dhcpreq); # recv data может из-за этого? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 3 июня, 2011 · Жалоба В винде оно теперь называется: OEMCP, я тоже подбирал для своего виндового снифера. На вскидку: возможно "$dhcpreq->xid()" в данном случае интерпретируется как указатель/адрес на функцию. $dhcpreq->Xid попробуйте так, прямое обращение к переменной. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
versen Опубликовано 6 июня, 2011 (изменено) · Жалоба В винде оно теперь называется: OEMCP, я тоже подбирал для своего виндового снифера. На вскидку: возможно "$dhcpreq->xid()" в данном случае интерпретируется как указатель/адрес на функцию. $dhcpreq->Xid попробуйте так, прямое обращение к переменной. Thread 3: Caught error in main loop: Can't locate object method "Xid" via package "Net::DHCP::Packet" at ./dhcpsql.pl line 273 Line273: logger($dhcpreq->xid()."\t"."Thread $tid: Got a packet src = $ipaddr:$port length = ".length($buf)); PS Перенес строку my ($buf, $fromaddr, $dhcpreq); # recv data чуть ниже в while( $RUNNING == 1 ) { my ($buf, $fromaddr, $dhcpreq); # recv data Это тоже не помогло.. Изменено 6 июня, 2011 пользователем versen Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 8 июня, 2011 · Жалоба $dhcpreq->{xid} Подробности в: /usr/local/lib/perl5/site_perl/5.10.1/Net/DHCP/Packet.pm Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kaba Опубликовано 22 июня, 2011 · Жалоба Доброго времени суток. Господа, есть вопрос: скачал файл DHCP-сервера из шапки, все необходимые модули установил. Далее хочу запустить все это. Не могли бы вы на пальцах объяснить, какова должна быть изначальная структура БД, с которой будет работать сервер. А еще лучше, ткнуть носом в нужные строки скрипта, где эта самая структура задается. Я так понял, что вся конфигурация сервера хранится именно в БД. Извиняюсь за дошкольные вопросы, просто с Perl-ом пришлось столкнуться впервые. Если что-то я не правильно понял, поправьте пожалуйста. Спасибо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 22 июня, 2011 · Жалоба Создать базу и написать запросы - домашнее задание :) В моём случае база была, она специфична. Поэтому я вынес всю работу с ней в отдельные функции, максимально разделив и реализовав всю обвязку. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kaba Опубликовано 23 июня, 2011 · Жалоба Создать базу и написать запросы - домашнее задание :) Ладно, спасибо. Буду разбирать дальше. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lynx10 Опубликовано 29 июня, 2011 · Жалоба пробовал заточить под свои задачи - всё встало без особых вопросов Спасибо Ivan_83 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zep Опубликовано 1 августа, 2011 · Жалоба Винда XP Prof SP3 не хочет просить адреса DNS (отдавал дпже принудительно, см. ниже) ... Хотя в связке с Dlink DIR-615 все впорядке. мистика. Options : DHO_DHCP_MESSAGE_TYPE(53) = DHCPACK DHO_DHCP_SERVER_IDENTIFIER(54) = 91.1.1.2 DHO_ROUTER_DISCOVERY(31) = 0 DHO_VENDOR_ENCAPSULATED_OPTIONS(43) = \x01\x04\x00\x00\x00\x02\x02\x04\x00\x00\x00\x01\xFF DHO_NETBIOS_NODE_TYPE(46) = 8 (249) = \x16[\xCA\x08\xAC\x10\x02\x01 DHO_DHCP_LEASE_TIME(51) = 300 DHO_DHCP_RENEWAL_TIME(58) = 400 DHO_DHCP_REBINDING_TIME(59) = 500 DHO_SUBNET_MASK(1) = 255.255.255.0 DHO_ROUTERS(3) = 172.16.2.1 DHO_DOMAIN_NAME_SERVERS(6) = 1.2.3.4 DHO_DOMAIN_NAME(15) = kuku2.net DHO_ROUTER_DISCOVERY(31) = 0 DHO_VENDOR_ENCAPSULATED_OPTIONS(43) = \x01\x04\x00\x00\x00\x02\x02\x04\x00\x00\x00\x01\xFF DHO_NETBIOS_NODE_TYPE(46) = 8 (249) = \x16[\xCA\x08\xAC\x10\x02\x01 DHO_DHCP_AGENT_OPTIONS(82) = \x01\x06\x00\x04\x00\xCA\x00\x09\x02\x08\x00\x06\xF0}h5\xD1 padding [0] = Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 1 августа, 2011 · Жалоба zep Может в настройках соединения стоит "получить адрес автоматически", но нет галочки "получить dns автоматически"? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zep Опубликовано 1 августа, 2011 · Жалоба zep Может в настройках соединения стоит "получить адрес автоматически", но нет галочки "получить dns автоматически"? нет. там все ок. Вообще идея с этой программой хорошая, но стиль написания непредсказуемый. Наверно буду переписывать. П.С. Не в обиду разработчику Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 2 августа, 2011 · Жалоба zep, В спецификации протокола написано, что клиент ДОЛЖЕН запрашивать списком опции (и принимать пакет только с тем, что он запросил, остальные - считать ошибочными), а сервер ДОЛЖЕН отдавать только те, что запросил клиент. На деле же получается, что множество клиентов (читай: винда) неправильно запрашивают, отсюда у серверов костыль - некоторые опции отдавать всегда, отсюда у клиентов костыль - игнорировать опции, которые клиент не запрашивал... Вот так и живем :). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 2 августа, 2011 · Жалоба Вообще идея с этой программой хорошая, но стиль написания непредсказуемый. Наверно буду переписывать. П.С. Не в обиду разработчику Я и сам такой. %) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Инкогнито Опубликовано 21 октября, 2011 · Жалоба Ёкарный бабай... А банально структуру требуемой базы описать нельзя? Хотя бы в форме sql. Приходится заниматься ананизмом... Идея и реализация - большое спасибо. Но довести бы "до ума", вообще цены небыло бы. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 21 октября, 2011 · Жалоба Спасибо за отзыв и интерес. Может вы поделитесь тем, что у вас получится?) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harmless Опубликовано 5 ноября, 2011 · Жалоба Всем привет! А можно дописать возможность к данному серверу обновлять зоны днс? И все же не помешала бы структура базы! для теста создал пару таблиц CREATE TABLE IF NOT EXISTS `subnets_routes` ( `destination` text NOT NULL, `mask` text NOT NULL, `gateway` text NOT NULL, `subnet_id` int(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `subnets` ( `dhcp_lease_time` text NOT NULL, `dhcp_renewal` text NOT NULL, `dhcp_rebind_time` text NOT NULL, `mask` text NOT NULL, `gateway` text NOT NULL, `dns2` text NOT NULL, `dns1` text NOT NULL, `subnet_id` int(10) NOT NULL, `domain` text NOT NULL, `vlan_id` int(5) NOT NULL, `type` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `dhcp_log` ( `created` date NOT NULL, `client_mac` varchar(255) NOT NULL, `client_ip` text NOT NULL, `gateway_ip` text NOT NULL, `client_ident` text NOT NULL, `requested_ip` text NOT NULL, `hostname` text NOT NULL, `dhcp_vendor_class` text NOT NULL, `dhcp_user_class` text NOT NULL, `dhcp_opt82_chasis_id` text NOT NULL, `dhcp_opt82_unit_id` text NOT NULL, `dhcp_opt82_port_id` text NOT NULL, `dhcp_opt82_vlan_id` text NOT NULL, UNIQUE KEY `client_mac` (`client_mac`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `users` ( `id` int(5) NOT NULL AUTO_INCREMENT, `ip` text NOT NULL, `mac` text NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; Но такой вариант не работает Может подскажите чуток? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 6 ноября, 2011 · Жалоба Что значить "обновлять зоны днс"? Где их обновлять? В вашем примере, лучше всего делать не днс1, днс2... а сделать просто днс, в ответе оно всё равно пакутеся в один массив, там может быть хоть 10 днс серверов. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harmless Опубликовано 6 ноября, 2011 · Жалоба Что значить "обновлять зоны днс"? Где их обновлять? В вашем примере, лучше всего делать не днс1, днс2... а сделать просто днс, в ответе оно всё равно пакутеся в один массив, там может быть хоть 10 днс серверов. Обновлять днс как при связке isc-dhcpd-server и bind - когда клиент регистрируется на дхцп то вносится запись в днс с именем и ипом новой тачки. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 6 ноября, 2011 · Жалоба Обновлять днс как при связке isc-dhcpd-server и bind - когда клиент регистрируется на дхцп то вносится запись в днс с именем и ипом новой тачки. Ну подправьте немного код, чтобы делался insert/update в базу dns-сервера (bind9-dlz, powerdns умеют хранить зоны в базе) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harmless Опубликовано 6 ноября, 2011 · Жалоба Ну подправьте немного код, чтобы делался insert/update в базу dns-сервера (bind9-dlz, powerdns умеют хранить зоны в базе) При чем тут вставить в базу Нужно чтоб когда, например, комп с именем test1 получал ип 10.10.10.10 и зону example.org ещ был доступен как test1.example.org В примере звязки приведенной мной выше дхцп сервер посылает какие-то данные днс по rndc на сколько я знаю Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 6 ноября, 2011 · Жалоба harmless А я предлагаю решить эту задачу другим способом, более универсальным. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harmless Опубликовано 6 ноября, 2011 · Жалоба А я предлагаю решить эту задачу другим способом, более универсальным. Если делать таким способом то придется рестартовать днс чтоб обновилась зона Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 6 ноября, 2011 · Жалоба harmless Не придётся Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
BlackSnow Опубликовано 6 ноября, 2011 (изменено) · Жалоба Программирую на php, с перлом встретился впервые... 4 часа сижу над кодом... Сервер запустился, вроде отдает все, но клиент IP не принимает =( perl dhcpd.pl -b 0.0.0.0 -v 2 Switch will be removed from the Perl core distribution in the next major release. Please install it from CPAN. It is being used at dhcpd.pl, line 19. [06/Nov/2011 19:46:20] BIND_ADDR: 0.0.0.0, THREADS_COUNT: 4, PIDFILE: /var/run/perl-dhcpd.pid [06/Nov/2011 19:46:20] Thread (1): START [06/Nov/2011 19:46:20] Thread (2): START [06/Nov/2011 19:46:20] Thread (0): START [06/Nov/2011 19:46:20] Thread (3): START [06/Nov/2011 19:46:23] Thread 0: Got a packet src = 0.0.0.0:68 length = 576 [06/Nov/2011 19:46:23] op = BOOTREQUEST htype = HTYPE_ETHER hlen = 6 hops = 0 xid = 1a13 secs = 0 flags = 8000 ciaddr = 0.0.0.0 yiaddr = 0.0.0.0 siaddr = 0.0.0.0 giaddr = 0.0.0.0 chaddr = 0019ffcb8641 sname = file = Options : DHO_DHCP_MESSAGE_TYPE(53) = DHCPDISCOVER DHO_DHCP_MAX_MESSAGE_SIZE(57) = 1152 DHO_DHCP_CLIENT_IDENTIFIER(61) = \x00cisco-0019.ffcb.8641-Vl939 DHO_HOST_NAME(12) = SPb-Salova-switch DHO_DHCP_PARAMETER_REQUEST_LIST(55) = 1 6 15 44 3 33 150 43 DHO_DHCP_OPTION_OVERLOAD(52) = 3 padding [265] = 000000000000000000000000000000000.......................000000000000000000 [06/Nov/2011 19:46:23] Sending response to = 255.255.255.255:68 length = 311 [06/Nov/2011 19:46:23] op = BOOTREPLY htype = HTYPE_ETHER hlen = 6 hops = 0 xid = 1a13 secs = 0 flags = 8000 ciaddr = 0.0.0.0 yiaddr = 192.168.238.11 siaddr = 0.0.0.0 giaddr = 0.0.0.0 chaddr = 0019ffcb8641 sname = file = Options : DHO_DHCP_MESSAGE_TYPE(53) = DHCPOFFER DHO_DHCP_SERVER_IDENTIFIER(54) = 192.168.239.1 DHO_DHCP_LEASE_TIME(51) = 100 DHO_SUBNET_MASK(1) = 255.255.254.0 DHO_ROUTERS(3) = 192.168.238.1 DHO_DOMAIN_NAME_SERVERS(6) = 8.8.8.8 8.8.8.8 DHO_HOST_NAME(12) = client DHO_DOMAIN_NAME(15) = flag.ru DHO_VENDOR_ENCAPSULATED_OPTIONS(43) = \x01\x04\x00\x00\x00\x02\x02\x04\x00\x00\x00\x01\xFF padding [0] = [06/Nov/2011 19:46:23] Thread 0: the code took: 0.0151272 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) Подскажите, что не так сервер отдает? Изменено 6 ноября, 2011 пользователем BlackSnow Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 6 ноября, 2011 · Жалоба Он писался и отлаживался для работы с релей агентом, напрямую он не тестировался. Посмотрите dhcpdump / tcpdump ~ом, действительно ли пакеты с ответом уходят клиенту, и посмотрите мак адрес на который они улетают, должен быть ff::ff Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...