old Posted June 18, 2013 · Report post Решил почитать на ночь код и заметил следующий кусок: #this keeps the program alive or something after exec'ing perl scripts END() { } BEGIN() { } {no warnings; *CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; }; }; eval q{exit}; if ($@) { exit unless $@ =~ /^fakeexit/; }; Вообще-то это что-то связанное с FastCGI ( к примеру, см. Perl + FastCGI + nginx , "Пример с codemongers.com"), а данном контексте оно что делает? Глобально переопределяет "exit"? Но тогда, если верить доке , переопределение должно быть сделано внутри блока BEGIN. Я попробовал потестировать это кусок кода, но в текущем виде не заметил от него никакой реакции. Кто-нибудь может подсказать, зачем он нужен в этом демоне? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted June 18, 2013 · Report post Кишки fastcgi враппера по ходу, откуда оно выросло... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 18, 2013 · Report post Кто-нибудь может подсказать, зачем он нужен в этом демоне? Я не большой спец в перле, поэтому не исключено что это просто мусор. Эти конструкции по замыслу нужны чтобы форкалось/работало демоном. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted June 19, 2013 · Report post Демонизация и форканье тут sub daemonize { delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer #setuid(65534) or die "Can't set uid: $!\n"; # nobody open(STDIN, "+>/dev/null") or die "Can't open STDIN: $!\n"; open(STDOUT, "+>&STDIN") or die "Can't open STDOUT: $!\n"; open(STDERR, "+>&STDIN") or die "Can't open STDERR: $!\n"; defined(my $tm = fork) or die "Can't fork: $!\n"; exit if $tm; setsid or die "Can't start a new session: $!\n"; umask 0; logger("Daemon mode"); } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
old Posted June 19, 2013 · Report post Кишки fastcgi враппера по ходу, откуда оно выросло... Походу да, потому что именно под FastCGI exit() делать нельзя и приходится выкручиваться, переопределением в том числе. Вот тут пример граблей, если вдруг кому интересно... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 13, 2014 · Report post Всем привет. Подскажите, что делаю не так, может чего не прописал. Есть свитч, есть релей, есть абонент и сервер ДХЦП схема: абонент - свитч - релей - свитч - сервер на свитче настроен влан, на релее прописано все на сервер, все работает. Добавил новый влан на свитч, в админке ДХЦП сервера, прописал этот влан, прописал маршруты, прописал в клиентах на 1 порт новый влан, клиент запрос шлет, сервер его видит, отправляет, и на этом все заканчивается. Где косяк может быть? П.С. Странно, вчера не работало, сегодня еще раз попробовал, пошло. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 16, 2014 · Report post Все таки не работает. Попробовал на свитче прям включить релей, вот что видит ДХЦП сервер: 15:52:43.011381 IP (tos 0x0, ttl 255, id 12222, offset 0, flags [none], proto UDP (17), length 334) 10.10.10.224.bootpc > 10.10.10.50.bootps: [udp sum ok] BOOTP/DHCP, Request from a8:20:66:2a:45:8f (oui Unknown), length 306, hops 1, xid 0xf4487abe, secs 61, Flags [none] (0x0000) Gateway-IP 10.10.10.224 Client-Ethernet-Address a8:20:66:2a:45:8f (oui Unknown) Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Discover Parameter-Request Option 55, length 9: Subnet-Mask, Default-Gateway, Domain-Name-Server, Domain-Name Option 119, LDAP, Option 252, Netbios-Name-Server Netbios-Node MSZ Option 57, length 2: 1500 Client-ID Option 61, length 7: ether a8:20:66:2a:45:8f Lease-Time Option 51, length 4: 7776000 Hostname Option 12, length 10: "MBP-Dima-2" Agent-Information Option 82, length 18: Circuit-ID SubOption 1, length 6: ^@^D^@M-a^A^A Remote-ID SubOption 2, length 8: ^@^FprM-O==w END Option 255, length 0 15:52:43.016069 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 341) 10.10.10.50.bootps > 10.10.10.224.bootps: [bad udp cksum f29e!] BOOTP/DHCP, Reply, length 313, xid 0xf4487abe, secs 61, Flags [none] (0x0000) Gateway-IP 10.10.10.224 Client-Ethernet-Address a8:20:66:2a:45:8f (oui Unknown) Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Offer Server-ID Option 54, length 4: 10.10.10.50 Lease-Time Option 51, length 4: 84600 RN Option 58, length 4: 42300 RB Option 59, length 4: 74025 Subnet-Mask Option 1, length 4: 255.255.255.0 Default-Gateway Option 3, length 4: 172.20.25.254 Domain-Name-Server Option 6, length 8: 10.10.10.1,10.10.10.2 Netbios-Node Option 46, length 1: h-node Agent-Information Option 82, length 18: Circuit-ID SubOption 1, length 6: ^@^D^@M-a^A^A Remote-ID SubOption 2, length 8: ^@^FprM-O==w END Option 255, length 0 вот как это выглядит если релеит то что все релеит :) 15:55:20.713824 IP (tos 0x0, ttl 64, id 38340, offset 0, flags [none], proto UDP (17), length 334) 10.10.10.254.bootps > 10.10.10.50.bootps: [udp sum ok] BOOTP/DHCP, Request from a8:20:66:2a:45:8f (oui Unknown), length 306, hops 1, xid 0xf4487ac0, secs 51, Flags [none] (0x0000) Gateway-IP 172.20.25.254 Client-Ethernet-Address a8:20:66:2a:45:8f (oui Unknown) Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Discover Parameter-Request Option 55, length 9: Subnet-Mask, Default-Gateway, Domain-Name-Server, Domain-Name Option 119, LDAP, Option 252, Netbios-Name-Server Netbios-Node MSZ Option 57, length 2: 1500 Client-ID Option 61, length 7: ether a8:20:66:2a:45:8f Lease-Time Option 51, length 4: 7776000 Hostname Option 12, length 10: "MBP-Dima-2" Agent-Information Option 82, length 18: Circuit-ID SubOption 1, length 6: ^@^D^@M-a^A^A Remote-ID SubOption 2, length 8: ^@^FprM-O==w END Option 255, length 0 15:55:20.718029 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 341) 10.10.10.50.bootps > 172.20.25.254.bootps: [bad udp cksum 808b!] BOOTP/DHCP, Reply, length 313, xid 0xf4487ac0, secs 51, Flags [none] (0x0000) Gateway-IP 172.20.25.254 Client-Ethernet-Address a8:20:66:2a:45:8f (oui Unknown) Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Offer Server-ID Option 54, length 4: 10.10.10.50 Lease-Time Option 51, length 4: 84600 RN Option 58, length 4: 42300 RB Option 59, length 4: 74025 Subnet-Mask Option 1, length 4: 255.255.255.0 Default-Gateway Option 3, length 4: 172.20.25.254 Domain-Name-Server Option 6, length 8: 10.10.10.1,10.10.10.2 Netbios-Node Option 46, length 1: h-node Agent-Information Option 82, length 18: Circuit-ID SubOption 1, length 6: ^@^D^@M-a^A^A Remote-ID SubOption 2, length 8: ^@^FprM-O==w END Option 255, length 0 Сейчас задампил клиента, посмотрю что там, но клиент не получает ответ сервера... Что не так делаю? Свитч прописан в базе, расположение, клиенты... На клиенте, по дампу видно, что клиент DHCP DISCOVER шлет, но ответа не получает. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 16, 2014 · Report post Может udp check sum в системе на сервере отключено и релей такие пакеты дропает? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 17, 2014 · Report post Как же пол сети уже работает на этом сервере? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 17, 2014 · Report post У вас в логе выше видно что контрольная сумма у некоторых пакетов совсем не та. Нужно или совсем выключать проверку и генерацию или делать чтобы она правильной была. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted February 17, 2014 · Report post если Вы про [bad udp cksum 808b!] то такое пишется и на работающих домах... 10.10.10.50.bootps > 172.20.19.254.bootps: [bad udp cksum 46f6!] Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted March 16, 2014 · Report post лог с абонентского ПК http://yadi.sk/d/VJKpBv6lKcFHB Почему то один и тот же ВЛАН на 1 свитче запускается, на другом не хочет. Дискавер уходит от клиента, офер приходит, и на этом заканчивается. пробую на одном и том же свитче, два разных влана. Настроил 1, проверил, все работает (задал расположение в нем выбрал свитч этот) Пробую неработающее расположение (выбираю рабочий свитч). Не идет.... Пересоздал расположение, все заработало.... Странно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pashaumka Posted March 22, 2014 · Report post День добрый Иван! а реализация скрипта для работы с IPv6 запросами у вас есть? хотелось бы параллельно с в4 и в6 раздавать ( айпи на клиента + делегировать ему подсеть ) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted March 22, 2014 · Report post Нету. Когда я последний раз смотрел то класса для ипв6 не было, а писать его самому не было мотивации. Технически там ничего сложного нет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted March 28, 2014 · Report post отпишу по своей проблеме, так и не нашел (с дебагом) почему не выдает ИП. Единственное что сыпет (в дебаг) Argument "172.20.3.40" isn't numeric in numeric ne (!=) at /lib/dhcp-perl/dhcpd.pl line 1075. в остальном запросы рабочие, все данные получает демон. Странно что удаление всех клиентов,расположения и добавление его заново, решает проблему. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted March 28, 2014 · Report post Смотрите внимательнее на тот код который вы дописывали. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted March 28, 2014 · Report post ну я не до такой степени вносил изменения...а в той строке $client_ip = $_[1]->ciaddr; $gateway_ip = $_[1]->giaddr; if (defined($_[1]->getOptionRaw(DHO_DHCP_CLIENT_IDENTIFIER()))) { $client_ident = BuffToHEX($_[1]->getOptionRaw(DHO_DHCP_CLIENT_IDENTIFIER())); }else{ $client_ident = ''; } if (defined($_[1]->getOptionRaw(DHO_DHCP_REQUESTED_ADDRESS()))) { $requested_ip = $_[1]->getOptionValue(DHO_DHCP_REQUESTED_ADDRESS()); }else{ if ($client_ip!="") { $requested_ip = $client_ip; } else { $requested_ip = ''; } } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted March 28, 2014 · Report post Могу подсказать по общей логике и по дхцп в частности. Перл я знаю так себе, и этот сервер третий и самый большой проект который я на нём делал. С тех пор я на нём ничего не писал и не отлаживал. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted March 28, 2014 · Report post может подскажите, где посмотреть, почему у меня создав расположение и клиентов, сервер видит запрос и отправляет оффер и на этом заканчивается обмен. Удалив и создав заново расположение, все работает нормально. П.С. Сам в перле не очень :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted March 28, 2014 (edited) · Report post if ($client_ip!="") { $requested_ip = $client_ip; } else { $requested_ip = ''; } заменить на $requested_ip = ''; $requested_ip = $client_ip if ($client_ip ne ""); Edited March 28, 2014 by pppoetest Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted June 23, 2014 · Report post Всем привет. Хочу поднять тему про пул адресов, хочу поставить вифи точку фрии, чтоб раздавало адреса из пула. И еще вопрос, иногда бывает конфликт ИП адресов, в лог в теории должно попадать DHCPDecline, но ничего такого нет, можно как то решить? П.С. Доната нет? :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 23, 2014 · Report post Там для записи decline есть отдельная функция: db_lease_decline - добавляйте туда какой угодно запрос к базе. Денег, давайте :) Яндекс кошелёк: 410011898378762 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nera Posted June 24, 2014 · Report post Подскажите, по силам данному скрипту решить такую проблему? http://forum.nag.ru/forum/index.php?showtopic=95051 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 24, 2014 · Report post отписался в вашем топике. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Cramac Posted June 25, 2014 · Report post Подскажите по правильности db_lease_decline В теории хочу просто видеть в логах, где произошел конфликт ИП. sub db_lease_decline { #my $dbh = $_[0]; #my $dhcpreq = $_[1]; return(0); my ($mac, $sth); my ($dhcp_opt82_vlan_id, $dhcp_opt82_unit_id, $dhcp_opt82_port_id, $dhcp_opt82_chasis_id); my ($client_ip, $gateway_ip, $client_ident, $requested_ip, $hostname, $dhcp_vendor_class, $dhcp_user_class); my ($message_type); $message_type = $_[1]->getOptionValue(DHO_DHCP_MESSAGE_TYPE()); # change hw addr format $mac = FormatMAC(substr($_[1]->chaddr(), 0, (2 * $_[1]->hlen()))); $sth = $_[0]->prepare(""); $sth = $_[0]->prepare("INSERT INTO `log_dhcp` (`t`, `agent_mac`, `agent_ip`, `cl_mac`, `cl_ip`, `cl_port`, `cl_vlan`, `cl_name`, `cl_vendor`, `m_type`) VALUES(NOW(), '$dhcp_opt82_chasis_id', '$gateway_ip', '$mac', '$requested_ip', '$dhcp_opt82_port_id', '$dhcp_opt82_vlan_id', '$hostname', '$dhcp_vendor_class', $message_type) "); if ($DEBUG > 1) { logger("INSERT INTO `log_dhcp` (`t`, `agent_mac`, `agent_ip`, `cl_mac`, `cl_ip`, `cl_port`, `cl_vlan`, `cl_name`, `cl_vendor`, `m_type`) VALUES(NOW(), '$dhcp_opt82_chasis_id', '$gateway_ip', '$mac', '$requested_ip', '$dhcp_opt82_port_id', '$dhcp_opt82_vlan_id', '$hostname', '$dhcp_vendor_class', $message_type) ") } $sth->execute(); $sth->finish(); return(0); } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...