📄 find.cgi
字号:
#!/usr/local/bin/perl# find.cgi# Broadcast to other webmin serversrequire './servers-lib.pl';use Socket;foreach $s (&list_servers()) { $server{gethostbyname($s->{'host'})}++; }# create the broadcast socket$port = $config{'listen'} ? $config{'listen'} : 10000;socket(BROAD, PF_INET, SOCK_DGRAM, getprotobyname("udp")) || &error("socket failed : $!");setsockopt(BROAD, SOL_SOCKET, SO_BROADCAST, pack("l", 1));# broadcast to some useful addresses$myip = &to_ipaddress(&get_system_hostname());if ($myip =~ /^(\d+\.\d+\.\d+)\.\d+$/) { push(@broad, "$1.255"); $myaddr{inet_aton($myip)}++; }push(@broad, "255.255.255.255");if (&foreign_check("net")) { &foreign_require("net", "net-lib.pl"); foreach $a (&foreign_call("net", "active_interfaces")) { push(@broad, $a->{'broadcast'}) if ($a->{'broadcast'}); $myaddr{inet_aton($a->{'address'})}++ if ($a->{'address'}); } }foreach $b (&unique(@broad)) { send(BROAD, "webmin", 0, sockaddr_in($port, inet_aton($b))); }# Get and display responses$| = 1;&header($text{'find_title'}, "");print "<hr><p>\n";$id = $tmstart = time();while(time()-$tmstart < 2) { local $rin; vec($rin, fileno(BROAD), 1) = 1; if (select($rin, undef, undef, 1)) { local $buf; local $from = recv(BROAD, $buf, 1024, 0); local ($fromport, $fromaddr) = sockaddr_in($from); local $fromip = inet_ntoa($fromaddr); if ($fromip !~ /\.(255|0)$/ && !$already{$fromip}++) { local ($host, $port, $ssl) = split(/:/, $buf); local $byname = gethostbyaddr($fromaddr, AF_INET); $host = !$host && $byname ? $byname : !$host && !$byname ? $fromip : $host; local $url = ($ssl ? 'https' : 'http'). "://$host:$port/"; if ($server{$fromaddr}) { print &text('find_already', "<tt>$url</tt>"),"<br>\n"; } elsif ($myaddr{$fromaddr}) { print &text('find_me', "<tt>$url</tt>"),"<br>\n"; } else { print &text('find_new', "<tt>$url</tt>"),"<br>\n"; &save_server({ 'id' => $id++, 'ssl' => $ssl, 'type' => 'unknown', 'port' => $port, 'host' => $host }); } } } }print "<p><hr>\n";&footer("", $text{'index_return'});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -