Ad Widget

Collapse

Мониторинг dhcp запросов

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • exhalace
    Junior Member
    • Mar 2016
    • 7

    #1

    Мониторинг dhcp запросов

    Подсчет количества DHCP запросов по типам при помощи netgraph и ipfw.

    Code:
    #!/bin/sh
    
    ipfw delete 20000
    
    ngctl shutdown ipfw:1 
    ngctl mkpeer ipfw: one2many 1 one
    ngctl name ipfw:1 one2many
    ngctl msg ipfw:1 setconfig "{ xmitAlg=2 failAlg=1 enabledLinks=[ 1 1 1 1 1 1 1 1 ] }"
    ngctl mkpeer one2many: bpf many0 main
    ngctl name one2many:many0 dhcp_discover
    ngctl mkpeer one2many: bpf many1 main
    ngctl name one2many:many1 dhcp_offer
    ngctl mkpeer one2many: bpf many2 main
    ngctl name one2many:many2 dhcp_request
    ngctl mkpeer one2many: bpf many3 main
    ngctl name one2many:many3 dhcp_decline
    ngctl mkpeer one2many: bpf many4 main
    ngctl name one2many:many4 dhcp_ack
    ngctl mkpeer one2many: bpf many5 main
    ngctl name one2many:many5 dhcp_nak
    ngctl mkpeer one2many: bpf many6 main
    ngctl name one2many:many6 dhcp_release
    ngctl mkpeer one2many: bpf many7 main
    ngctl name one2many:many7 dhcp_inform
    
    #DHCPDISCOVER
    #udp port 67 and udp[247:4] = 0x63350101
    ngctl msg dhcp_discover: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418049 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPOFFER
    #udp port 67 and udp[247:4] = 0x63350102
    ngctl msg dhcp_offer: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418050 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPREQUEST
    #udp port 67 and udp[247:4] = 0x63350103
    ngctl msg dhcp_request: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418051 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPDECLINE
    #udp port 67 and udp[247:4] = 0x63350104
    ngctl msg dhcp_decline: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418052 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPACK
    #udp port 67 and udp[247:4] = 0x63350105
    ngctl msg dhcp_ack: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } \
    { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } { code=40 jt=0 jf=0 k=6 } \
    { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } \
    { code=64 jt=0 jf=0 k=247 } { code=21 jt=0 jf=1 k=1664418053 } { code=6 jt=0 jf=0 k=65535 } \
    { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPNAK
    #udp port 67 and udp[247:4] = 0x63350106
    ngctl msg dhcp_nak: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418054 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPRELEASE
    #udp port 67 and udp[247:4] = 0x63350107
    ngctl msg dhcp_release: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418055 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    #DHCPINFORM
    #udp port 67 and udp[247:4] = 0x63350108
    ngctl msg dhcp_inform: setprogram { thisHook=\"main\" ifMatch=\"main\" ifNotMatch=\"main\" bpf_prog_len=19 bpf_prog=[ \
    { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=15 jf=0 k=96 } { code=48 jt=0 jf=0 k=0 } \
    { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=12 k=64 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=10 k=17 } \
    { code=40 jt=0 jf=0 k=6 } { code=69 jt=8 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=72 jt=0 jf=0 k=0 } \
    { code=21 jt=2 jf=0 k=67 } { code=72 jt=0 jf=0 k=2 } { code=21 jt=0 jf=3 k=67 } { code=64 jt=0 jf=0 k=247 } \
    { code=21 jt=0 jf=1 k=1664418056 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }
    
    ipfw add 20000 netgraph 1 udp from any to any dst-port 67
    Смотреть статистику вот так
    Code:
    #!/bin/sh
    
    ngctl=`which ngctl`
    egrep=`which egrep`
    
    echo DISCOVER: `${ngctl} msg dhcp_discover: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo OFFER: `${ngctl} msg dhcp_offer: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo REQUEST: `${ngctl} msg dhcp_request: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo DECLINE: `${ngctl} msg dhcp_decline: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo ACK: `${ngctl} msg dhcp_ack: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo NAK: `${ngctl} msg dhcp_nak: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo RELEASE: `${ngctl} msg dhcp_release: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    echo INFORM: `${ngctl} msg dhcp_inform: getstats \"main\" | ${egrep} 'recvMatchFrames=[0-9]+' -o | ${egrep} '[0-9]+' -o`
    Вывод
    Code:
    DISCOVER: 2650
    OFFER: 156
    REQUEST: 2204
    DECLINE:
    ACK: 1970
    NAK: 3
    RELEASE:
    INFORM: 26
    Перед использованием скрипта изменить номер правила в ipfw на собственное.
    Также во FreeBSD надо подгрузить необходимые модули:
    kldload ng_ipfw
    kldload ng_one2many
    kldload ng_bpf

    Остается только добавить необходимую метрику в Zabbix.
Working...