LINUX.ORG.RU
ФорумAdmin

Необходимо составить список вида ip/mac/netbios имя.

 


0

1

Просьба тряпками не бить. Есть сеть с DCHP с несколькими подсетями. Сеть строил не я и даже нормальной карты сети нет. Начальству нужно вот прямо сейчас список соответствия айпи адресов, маков и имен. В сети зоопарк win xp\win 7\win 10. DCHP сервер на debian. Руками делать замучаюсь, а в скриптах не силен. Буду благодарен за советы.

DCHP

Букавки не перепутали? :)

с несколькими подсетями

Тут уж реализаций гораздо больше одной, так что надо больше золота.

В сети зоопарк win xp\win 7\win 10. DCHP сервер на debian.

Если только win то у них netbiosname вроде соответствует hostname и он же отдается при запросе dhcp (на 100% за базар не отвечу) т.е. все три имя одинаковы.
Опять возвращаясь к реализации, в простом варианте возможно есть файлик[и] dhcpd.leases из которого[ых] можно все достать. Смотрите сами.

Буду благодарен за советы.

Если нужны реально живые, то первое что приходит в голову
nmap --script smb-os-discovery.nse -p445 $NET или в цикле nmblookup -A $IP-CLIENT но раз у вас несколько подсетей то выполнять в каждой из них.

anc ★★★★★
()
Ответ на: комментарий от anc

nmblookup -A $IP-CLIENT вполне устраивает, вот если бы кто-нибудь помог его вывод с помощью седа привести в вид ip\mac\netbios-name хотя я наверное сильно много хочу =)

diagnoz
() автор топика
Ответ на: комментарий от anc

PS Если «Сеть строил не я и даже нормальной карты сети нет» и при этом «Начальству нужно вот прямо сейчас» - слать лесом «Начальство» с такими запросами, начинать нужно с другого.

anc ★★★★★
()
Ответ на: комментарий от anc

тут скорее начальство тебя пошлет со словами «за забором желающих на твое место много» ПыСы Я вообще инженер по ремонту техники и принтеры починяю. А сетями и прочим интересовался в качестве хобби. А тут решили мной дырку заткнуть.

diagnoz
() автор топика
Ответ на: комментарий от diagnoz

Тут недавно пролетала тема про парсинг многострочного выхлопа, там реально «красивые» варианты были. Рекомендую поискать. Ну или будет время сам что-то накостыляю, но точно не сегодня.

anc ★★★★★
()

все давно придумали за нас. Как уже писали выше, надо парсить лог dhcp-сервера. Чем парсить- без разницы. У меня например кроном раз в пол часа дергается скрипт, который генерит html- страничку в таком виде: http://i.imgur.com/bG4vDrf.png

сам скрипт:
/usr/bin/awk -f /home/sysadm/leases.parse < /var/lib/dhcpd/dhcpd.leases > /usr/share/www/local/htdocs/dl.html

cat /home/sysadm/leases.parse

#
# dhcp.awk
#
# awk -f dhcp.awk  < /var/db/dhcpd.leases
#
# dhcpd leases to html done in AWK
# Copyright (C) 2005 Juan J. Martнnez <reidrac*at*blackshell.usebox.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
BEGIN {
    printf("<html>\n<head>\n<title>DHCP leases</title>\
<style type=\"text/css\">\
table { border: 1px solid #eee; width: 100%% }\
.header { background-color: #aaa; font-weight: bold }\
.data0 { background-color: #fff }\
.data1 { background-color: #eee }\
</style>\
</head>\n<body>\n");
    printf("<h1>DHCP leases</h2>\n");
    lease=0;
    header=0;
    fields=0;
    data=0;
}

lease==0 && /lease\ [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\ {/ {
    lease=1;
    if (header==0)
    {
        printf("<table class=\"table\">\
<tr class=\"header\">\
<td>IP</td>\n<td>Start</td>\n<td>End</td>\
<td>MAC Addr.</td>\n<td>Hostname</td>\n</tr>\n");
        header=1;
    }
    if (data==0)
    {
        printf("<tr class=\"data0\">\n");
        data=1;
    }
    else
    {
        printf("<tr class=\"data1\">\n");
        data=0;
    }
    printf("<td>%s</td>\n", $2);
    fields++;
}

lease==1 && /starts\ [^;]*;/ {
    sub(";", "", $4);
    printf("<td>%s %s</td>\n", $3, $4);
    fields++;
}

lease==1 && /ends\ [^;]*;/ {
    sub(";", "", $4);
    printf("<td>%s %s</td>\n", $3, $4);
    fields++;
}

lease==1 && /hardware\ ethernet\ [^;]*;/ {
    sub(";", "", $3);
    printf("<td>%s</td>\n", $3);
    fields++;
}


lease==1 && /client-hostname\ [^;]*;/ {
    gsub(";", "", $2);
    printf("<td>%s</td>\n", $2);
    fields++;
}

lease==1 && /}/ {
    lease=0;
    for(i=0;i<5-fields;i++)
        printf("<td> </td>\n");
    fields=0;
    printf("</tr>\n");
}

END {
    if (header==0)
    {
        printf("<p>There are no leases</p>\n");
    }
    else
    {
        printf("</table>\n");
    }

    printf("</body>\n</html>\n");
}
 

tmp_do
()
Ответ на: комментарий от tmp_do

Вы путаете awk и C :) Для printf в awk скобочки и точка с запятой не нужны. Как, в прочем, и для html можно заюзать одиночные кавычки, чтобы не эскейпить двойные. Ну и

"str\
str2"
надо писать тогда уж:
"str\n\
str2"

vodz ★★★★★
()
Ответ на: комментарий от vodz

Чувак, это копипаста там в шапке указан автор этой простыни))

tmp_do
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.