diff options
Diffstat (limited to 'Monitoring')
22 files changed, 818 insertions, 0 deletions
| diff --git a/Monitoring/Makefile b/Monitoring/Makefile new file mode 100644 index 00000000..cc1d8903 --- /dev/null +++ b/Monitoring/Makefile @@ -0,0 +1,8 @@ +.phony: debian +debian: +	[ `which nagios3` ] || apt-get install nagios3 +	rm /etc/nagios3/conf.d/localhost_nagios2.cfg  || true +	cp -r conf/* /etc/nagios3/conf.d/ +	cp -R htdocs/* /usr/share/nagios3/htdocs/ +	cp -r plugins /usr/lib/nagios +	/etc/init.d/nagios3 reload diff --git a/Monitoring/TODO b/Monitoring/TODO new file mode 100644 index 00000000..6d74fdcd --- /dev/null +++ b/Monitoring/TODO @@ -0,0 +1,5 @@ +add guest user +add guest user to  +>     * authorized_for_all_services=usernagios,guest +>     * authorized_for_all_hosts=usernagios,guest +in /etc/nagios3/somewhere diff --git a/Monitoring/conf/hostgroups_nagios2.cfg b/Monitoring/conf/hostgroups_nagios2.cfg new file mode 100644 index 00000000..63acbf50 --- /dev/null +++ b/Monitoring/conf/hostgroups_nagios2.cfg @@ -0,0 +1,31 @@ +# Some generic hostgroup definitions + +# A simple wildcard hostgroup +define hostgroup { +        hostgroup_name  all +		alias           All Servers +		members         * +        } + +# A list of your Debian GNU/Linux servers +define hostgroup { +        hostgroup_name  debian-servers +		alias           Debian GNU/Linux Servers +		members         localhost +        } + +# A list of your web servers +define hostgroup { +        hostgroup_name  http-servers +		alias           HTTP servers +		members         localhost +        } + +# A list of your ssh-accessible servers +define hostgroup { +        hostgroup_name  ssh-servers +		alias           SSH servers +		members         localhost +        } + + diff --git a/Monitoring/conf/krebs_hosts.cfg b/Monitoring/conf/krebs_hosts.cfg new file mode 100644 index 00000000..a929fa19 --- /dev/null +++ b/Monitoring/conf/krebs_hosts.cfg @@ -0,0 +1,78 @@ + +# +# Ur-Krebs +# +define host{ +        use                     generic-host +        host_name               krebs.shack +        alias                   krebs +        _tinc_address           10.7.7.156 +        address                 10.42.23.5 +        parents                 shack-coreswitch +        hostgroups              krebs-machines,tinc-nodes,ssh-servers +        } +# +# UTART +# +define host{ +        use                     generic-host +        host_name               utart +        alias                   UTART +        _tinc_address           10.7.7.66 +        address                 10.42.23.23 +        parents                 shack-coreswitch +        hostgroups              krebs-machines,tinc-nodes,ssh-servers +        } +# +# ytart +# will use tinc ip as long as no static ip is supplied +# +define host{ +        use                     generic-host +        host_name               ytart +        alias                   ytart +        _tinc_address           10.7.7.201 +        parents                 shack-wlan-ap5 +        address                 10.7.7.201 +        hostgroups              krebs-machines,tinc-nodes,ssh-servers +        } +# +# uPM +# +define host{ +        use                     generic-host +        host_name               upm +        alias                   uPM Virtual Machine +        _tinc_address           10.7.7.99 +        address                 upm.shack +        parents                 shack-node1 +        hostgroups              krebs-machines,ssh-servers,shack-rz  +        #,tinc-nodes +        } + +# TODO add upm and genericore as tinc-nodes +# TODO check MONGODB on uPM + + + +#TODO verkrebse genericore/get password +define host{ +        use                     generic-host +        host_name               genericore +        alias                   genericore Virtual Machine +        #_tinc_address           10.7.7.XX +        address                 genericore.shack +        parents                 shack-node1 +        hostgroups              ssh-servers,shack-rz +        #,tinc-nodes,krebs-machines +        } + +define host{ +        use                     generic-host +        host_name               shepherd +        alias                   Shepherd Krebs +        _tinc_address           10.7.7.29 +        address                 10.42.23.42 +        parents                 shack-coreswitch +        hostgroups              krebs-machines,tinc-nodes,ssh-servers +        } diff --git a/Monitoring/conf/krebsnet.cfg b/Monitoring/conf/krebsnet.cfg new file mode 100644 index 00000000..ae5b898e --- /dev/null +++ b/Monitoring/conf/krebsnet.cfg @@ -0,0 +1,20 @@ +## extended infos for krebsnet +define hostgroup { +        hostgroup_name   krebs-machines +        alias            Krebs Machines +        } +define hostextinfo{ +        hostgroup_name   krebs-machines +        notes            Deployed Krebse +#       notes_url        http://webserver.localhost.localdomain/hostinfo.pl?host=netware1 +        icon_image       krebs/krebs.png +        icon_image_alt   Krebs +        vrml_image       krebs.png +        statusmap_image  krebs/krebs.gd2 +        } +#define host{ +#        use             generic-host +#        register        0 +#        name            tinc-only-host +#        check_command   check_internal_tinc_up!100.0,20%!500.0,60% +#        } diff --git a/Monitoring/conf/localhost.cfg b/Monitoring/conf/localhost.cfg new file mode 100644 index 00000000..3b098195 --- /dev/null +++ b/Monitoring/conf/localhost.cfg @@ -0,0 +1,60 @@ +# A simple configuration file for monitoring the local host +# This can serve as an example for configuring other servers; +# Custom services specific to this host are added here, but services +# defined in nagios2-common_services.cfg may also apply. +#  + +define host{ +        use                     generic-host            ; Name of host template to use +        host_name               localhost +        alias                   localhost +        address                 127.0.0.1 +        hostgroups              krebs-machines +        } + +# Define a service to check the disk space of the root partition +# on the local machine.  Warning if < 20% free, critical if +# < 10% free space on partition. + +define service{ +        use                             generic-service         ; Name of service template to use +        host_name                       localhost +        service_description             Disk Space +        check_command                   check_all_disks!20%!10% +        } + + + +# Define a service to check the number of currently logged in +# users on the local machine.  Warning if > 20 users, critical +# if > 50 users. + +define service{ +        use                             generic-service         ; Name of service template to use +        host_name                       localhost +        service_description             Current Users +        check_command                   check_users!20!50 +        } + + +# Define a service to check the number of currently running procs +# on the local machine.  Warning if > 250 processes, critical if +# > 400 processes. + +define service{ +        use                             generic-service         ; Name of service template to use +        host_name                       localhost +        service_description             Total Processes +		check_command                   check_procs!250!400 +        } + + + +# Define a service to check the load on the local machine.  + +define service{ +        use                             generic-service         ; Name of service template to use +        host_name                       localhost +        service_description             Current Load +		check_command                   check_load!5.0!4.0!3.0!10.0!6.0!4.0 +        } diff --git a/Monitoring/conf/other_hosts.cfg b/Monitoring/conf/other_hosts.cfg new file mode 100644 index 00000000..bfc36154 --- /dev/null +++ b/Monitoring/conf/other_hosts.cfg @@ -0,0 +1,23 @@ +define host{ +        use                     generic-host +        host_name               google.de +        alias                   Google Website +        address                 google.de +        parents                 shack-modem +        hostgroups              http-servers +        } + +define host{ +        use                     generic-host +        host_name               google-dns +        parents                 shack-gw +        parents                 shack-modem +        alias                   Google DNS Service (always reachable) +        address                 8.8.8.8 +        } +define service { +        host_name               google-dns +        service_description     DNS Service +        use                     generic-service +        check_command           check_dns +        } diff --git a/Monitoring/conf/shack_infrastructure.cfg b/Monitoring/conf/shack_infrastructure.cfg new file mode 100644 index 00000000..dd123dc3 --- /dev/null +++ b/Monitoring/conf/shack_infrastructure.cfg @@ -0,0 +1,231 @@ +# + +# +# Shack Virtual Machine Hoster Platform +# + +# +# Virtualization and storage +# +define host{ +        use                     generic-host +        host_name               shack-node1 +        alias                   Shack Virtualization Server +        address                 10.42.0.10 +        parents                 shack-serverswitch +        hostgroups              shack-rz,ssh-servers +        } +define host{ +        use                     generic-host +        host_name               shack-zetbox +        alias                   Shack Virtualization Server +        address                 10.42.0.10 +        parents                 shack-serverswitch +        hostgroups              shack-rz,ssh-servers +        } +define host{ +        use                     generic-host +        host_name               shack-plattenschwein +        parents                 shack-serverswitch +        alias                   Shack Plattenschwein +        address                 10.42.0.12 +        hostgroups              shack-rz,ssh-servers +        } +define host{ +        use                     generic-host +        host_name               shack-gauda0 +        parents                 shack-serverswitch +        alias                   Shack gauda0 Mining Server +        address                 gauda0.shack +        hostgroups              shack-rz +        } +# +# Network Infrastructure +# + +# +## Shack gateway (no gateway-no internet) +# +define host{ +        use                     generic-host +        host_name               shack-gw +        parents                 shack-coreswitch +        alias                   Watchguard Shack Gateway +        address                 10.42.0.1 +        hostgroups              shack-rz,ssh-servers +        } +define host{ +        use                     generic-host +        host_name               shack-modem +        parents                 shack-gw +        alias                   Shack Telecom VDSL Router +        address                 192.168.2.1 +        hostgroups              shack-rz +        } +define host{ +        use                     generic-host +        host_name               shack-externswitch +        parents                 shack-gw +        alias                   Shack External Switch (2.OG) +        address                 10.0.10.2 +        hostgroups              shack-rz +        } + +define service { +        host_name               shack-gw +        service_description     DNS Service +        use                     generic-service +        check_command           check_dns +        } +define host{ +        use                     generic-host +        host_name               shack-coreswitch +        alias                   Shack Cisco Router Coreswitch +        address                 10.42.0.3 +        hostgroups              shack-rz,ssh-servers +        } +define host{ +        use                     generic-host +        host_name               shack-serverswitch +        parents                 shack-coreswitch +        alias                   Shack Cisco Router Serverswitch +        address                 10.42.0.4 +        hostgroups              shack-rz +        } + +define host{ +        use                     generic-host +        host_name               shack-wlan-ap1 +        parents                 shack-coreswitch +        alias                   Shack Wlan Access Point 1 +        address                 10.42.0.5 +        hostgroups              wlan-ap +        } +define host{ +        use                     generic-host +        host_name               shack-wlan-ap2 +        parents                 shack-coreswitch +        alias                   Shack Wlan Access Point 2 +        address                 10.42.0.6 +        hostgroups              wlan-ap +        } +define host{ +        use                     generic-host +        host_name               shack-wlan-ap3 +        parents                 shack-coreswitch +        alias                   Shack Wlan Access Point 3 +        address                 10.42.0.7 +        hostgroups              wlan-ap +        } +define host{ +        use                     generic-host +        host_name               shack-wlan-ap4 +        parents                 shack-coreswitch +        alias                   Shack Wlan Access Point 4 +        address                 10.42.0.8 +        hostgroups              wlan-ap +        } +define host{ +        use                     generic-host +        host_name               shack-wlan-ap5 +        parents                 shack-coreswitch +        alias                   Shack Wlan Access Point 5 +        address                 10.42.0.9 +        hostgroups              wlan-ap +        } +# +# Voip Infrastructure +# +define host{ +        use                     generic-host +        host_name               shack-voip +        alias                   Shack Cisco VOIP Gateway +        address                 10.42.0.2 +        parents                 shack-coreswitch +        hostgroups              shack-rz,http-servers +        } + +define service{ +        host_name               shack-voip +        service_description     SIP Service +        use                     generic-service +        check_command           check_sip +        } + + + + + +# +# Shack DNS Server +# + +define host{ +        use                     generic-host +        host_name               shack-dns +        parents                 shack-zetbox +        alias                   Shack DNS Virtual Host +        address                 10.42.0.100 +        hostgroups              shack-rz +        } +define service { +        host_name               shack-dns +        service_description     DNS Service +        use                     generic-service +        check_command           check_dns_shack +        } + +define host{ +        use                     generic-host +        host_name               shack-pxe +        parents                 shack-zetbox +        alias                   Shack PXEBoot Vhost +        address                 pxeboot.shack +        hostgroups              shack-rz +        } + +define host{ +        use                     generic-host +        host_name               shack-printsrv +        parents                 shack-node1 +        alias                   Shack Print Server +        address                 printer.shack +        hostgroups              shack-rz +        } + +define host{ +        use                     generic-host +        host_name               shack-aptproxy +        parents                 shack-zetbox +        alias                   Shack Apt-proxy +        address                 aptproxy.shack +        hostgroups              shack-rz +        } + +define host{ +        use                     generic-host +        host_name               shack-shack +        parents                 shack-node1 +        alias                   Shack Data Exchange +        address                 shack.shack +        hostgroups              shack-rz,ssh-servers +        } + +# +# shack ldap server +# +define host{ +        use                     generic-host +        host_name               shack-ldap +        parents                 shack-zetbox +        alias                   Shack LDAP Server +        address                 ldap.shack +        hostgroups              shack-rz +        } +define service { +        host_name               shack-ldap +        service_description     LDAP Service +        use                     generic-service +        check_command           check_ldap!shammunity +        } + diff --git a/Monitoring/conf/shacknet.cfg b/Monitoring/conf/shacknet.cfg new file mode 100644 index 00000000..7658ab80 --- /dev/null +++ b/Monitoring/conf/shacknet.cfg @@ -0,0 +1,34 @@ +define hostgroup { +        hostgroup_name   shack-rz +        alias            Shack RZ Infrastructure +        } +define hostgroup { +        hostgroup_name   wlan-ap +        alias            Shack Wlan Access Points +        } +define hostextinfo{ +        hostgroup_name   wlan-ap +        notes            Access Points for Shack +        icon_image       krebs/wireless_access_point.png +        icon_image_alt   wireless_access_point +        vrml_image       wireless_access_point.png +        statusmap_image  krebs/wireless_access_point.gd2 +        } +define hostextinfo{ +        hostgroup_name   shack-rz +        notes            Shack RZ Infrastructure +        icon_image       krebs/shack.png +        icon_image_alt   shack-RZ +        vrml_image       shack.png +        statusmap_image  krebs/shack.gd2 +        } +         +define command { +        command_name          check_sip +        command_line          $USER1$/check_tcp -H $HOSTADDRESS$ -p 5060 +        } + +define command { +	command_name	check_dns_shack +	command_line	$USER1$/check_dns -H shack.shack -s '$HOSTADDRESS$' +        } diff --git a/Monitoring/conf/tinc_hosts.cfg b/Monitoring/conf/tinc_hosts.cfg new file mode 100644 index 00000000..23c2b75e --- /dev/null +++ b/Monitoring/conf/tinc_hosts.cfg @@ -0,0 +1,45 @@ +#connection will not work if no internet is available (e.g. no shack-gateway) + +# +# Miefda Supernode +# +define host{ +        use                     generic-host +        host_name               supernode +        alias                   Supernode External +        _TINC_ADDRESS           10.7.7.1 +        address                 miefda.org +        parents                 shack-modem +        hostgroups              tinc-nodes,ssh-servers,http-servers +        } + +define service { +        host_name                 supernode +        service_description       IRC +        use                       generic-service +        check_command             check_ircd +        } +# +# Sharepoint (dhbw-stuttgart) +# +define host{ +        use                     generic-host +        host_name               sharepoint +        alias                   PA Sharepoint +        address                 141.31.8.11 +        _TINC_ADDRESS           10.7.7.5 +        parents                 shack-modem +        hostgroups              tinc-nodes,ssh-servers +        } +# +# Leechi +# +define host{ +        use                     generic-host +        host_name               leechi +        alias                   no_omo +        address                 leechi.kicks-ass.org +        _TINC_ADDRESS           10.7.7.111 +        parents                 shack-modem +        hostgroups              tinc-nodes,ssh-servers,http-servers +        } diff --git a/Monitoring/conf/tincnet.cfg b/Monitoring/conf/tincnet.cfg new file mode 100644 index 00000000..f0b35b4e --- /dev/null +++ b/Monitoring/conf/tincnet.cfg @@ -0,0 +1,31 @@ +define hostgroup { +        hostgroup_name   tinc-nodes +        alias            Tinc Nodes +        } + +define hostextinfo{ +        hostgroup_name   tinc-nodes +        notes            Tinc Nodes +        icon_image       krebs/tinc.png +        icon_image_alt   tinc +        vrml_image       tinc.png +        statusmap_image  krebs/tinc.gd2 +        } + +define command { +        command_name check_internal_tinc_up +        command_line $USER1$/check_ping -H $_HOSTTINC_ADDRESS$ -w $ARG1$ -c $ARG2$ +        } +define command { +        command_name check_ircd +        command_line $USER1$/check_ircd $_HOSTTINC_ADDRESS$ +        } + +define service { +        hostgroup_name                  tinc-nodes +        service_description             tinc internal +        check_command                   check_internal_tinc_up!100.0,20%!500.0,60% +        use                             generic-service +        notification_interval           0 +} + diff --git a/Monitoring/htdocs/images/logos/krebs/favicon.ico b/Monitoring/htdocs/images/logos/krebs/favicon.icoBinary files differ new file mode 100644 index 00000000..fa18384c --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/favicon.ico diff --git a/Monitoring/htdocs/images/logos/krebs/krebs.gd2 b/Monitoring/htdocs/images/logos/krebs/krebs.gd2Binary files differ new file mode 100644 index 00000000..1113f03e --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/krebs.gd2 diff --git a/Monitoring/htdocs/images/logos/krebs/krebs.png b/Monitoring/htdocs/images/logos/krebs/krebs.pngBinary files differ new file mode 100644 index 00000000..3d8a8ab8 --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/krebs.png diff --git a/Monitoring/htdocs/images/logos/krebs/shack.gd2 b/Monitoring/htdocs/images/logos/krebs/shack.gd2Binary files differ new file mode 100644 index 00000000..8b0d98e5 --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/shack.gd2 diff --git a/Monitoring/htdocs/images/logos/krebs/shack.png b/Monitoring/htdocs/images/logos/krebs/shack.pngBinary files differ new file mode 100644 index 00000000..53f1275b --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/shack.png diff --git a/Monitoring/htdocs/images/logos/krebs/tinc.gd2 b/Monitoring/htdocs/images/logos/krebs/tinc.gd2Binary files differ new file mode 100644 index 00000000..36572d4a --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/tinc.gd2 diff --git a/Monitoring/htdocs/images/logos/krebs/tinc.png b/Monitoring/htdocs/images/logos/krebs/tinc.pngBinary files differ new file mode 100644 index 00000000..daa1fdeb --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/tinc.png diff --git a/Monitoring/htdocs/images/logos/krebs/wireless_access_point.gd2 b/Monitoring/htdocs/images/logos/krebs/wireless_access_point.gd2Binary files differ new file mode 100644 index 00000000..6e740ec4 --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/wireless_access_point.gd2 diff --git a/Monitoring/htdocs/images/logos/krebs/wireless_access_point.png b/Monitoring/htdocs/images/logos/krebs/wireless_access_point.pngBinary files differ new file mode 100644 index 00000000..9febe45e --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/wireless_access_point.png diff --git a/Monitoring/htdocs/images/logos/krebs/wireless_access_point_64.png b/Monitoring/htdocs/images/logos/krebs/wireless_access_point_64.pngBinary files differ new file mode 100644 index 00000000..fe9788af --- /dev/null +++ b/Monitoring/htdocs/images/logos/krebs/wireless_access_point_64.png diff --git a/Monitoring/plugins/check_sip b/Monitoring/plugins/check_sip new file mode 100755 index 00000000..24374727 --- /dev/null +++ b/Monitoring/plugins/check_sip @@ -0,0 +1,252 @@ +#!/usr/bin/perl -w +# +# check_sip plugin for nagios +# $Revision: 1.2 $ +# +# Nagios plugin to check SIP servers +# +# By Sam Bashton, Bashton Ltd +# bashton.com/content/nagiosplugins +# Michael Hirschbichler, Institute of Broadband Communications,  +#  Vienna University of Technology +# +#   This program is free software; you can redistribute it and/or modify +#   it under the terms of the GNU General Public License as published by +#   the Free Software Foundation; either version 2 of the License, or +#   (at your option) any later version. +# +#   This program is distributed in the hope that it will be useful, +#   but WITHOUT ANY WARRANTY; without even the implied warranty of +#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#   GNU General Public License for more details. +# +#   You should have received a copy of the GNU General Public License +#   along with this program; if not, write to the Free Software +#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + +use strict; +use lib "/usr/lib/nagios/plugins"; +use utils qw($TIMEOUT %ERRORS &print_revision &support); +use vars qw($PROGNAME); +use IO::Socket::INET; +#use Sys::Hostname; +use Time::HiRes qw(gettimeofday); +use Net::Domain qw (hostname hostfqdn hostdomain); + +$PROGNAME = "check_sip"; +my $VERSION  = "1.2"; + +$ENV{'BASH_ENV'}='';  +$ENV{'ENV'}=''; +$ENV{'PATH'}=''; +$ENV{'LC_ALL'}='C'; + +my ($opt_V,$opt_h,$opt_u,$opt_p,$opt_H, $opt_w, $opt_s, $opt_f); +$opt_V = $opt_h = $opt_u = $opt_p = $opt_H = $opt_w = $opt_s = $opt_f = ''; + +my $state = 'UNKNOWN'; + +use Getopt::Long; +Getopt::Long::Configure('bundling'); +GetOptions( +  "V"   => \$opt_V,   "version"       => \$opt_V, +  "h"   => \$opt_h,   "help"          => \$opt_h, +  "s"   => \$opt_s, +  "f=s" => \$opt_f,   "fromuri=s"     => \$opt_f, +  "u=s" => \$opt_u,   "uri=s"         => \$opt_u, +  "p=s" => \$opt_p,   "port=s"        => \$opt_p, +  "H=s" => \$opt_H,   "host=s"        => \$opt_H, +  "w=s" => \$opt_w,   "warn=s"	      => \$opt_w +); + +# -h displays help +if ($opt_h) { printHelp(); exit $ERRORS{'OK'}; } + +# -V display version number +if ($opt_V) { +  print_revision($PROGNAME, $VERSION); +  exit $ERRORS{'OK'}; +}; + +#  Check the sip URI is OK +unless ($opt_u) { printHelp(); exit $ERRORS{'UNKNOWN'} } + +# Port is 5060 unless otherwise specified +unless ($opt_p) { $opt_p = 5060 } + +# Determine the host from the sip URI if it wasn't specified with -H +unless ($opt_H) { $opt_H = hostFromURI($opt_u) } + +# Check the host is valid +unless (utils::is_hostname($opt_H)) +{ +  print "$opt_H is not a valid hostname\n"; +  printHelp(); +  exit $ERRORS{"UNKNOWN"}; +} + +unless ($opt_w) { $opt_w = 5 } # Warn if response takes longer than 5 seconds + +### Main code ############################################################### + +# Timeout if we don't recieve a response within a suitable timeframe.. +$SIG{'ALRM'} = sub { +  print ("SIP timeout: No response from SIP server after $TIMEOUT seconds\n"); +  exit $ERRORS{"CRITICAL"}; +}; +alarm($TIMEOUT); + +my $localhost = hostfqdn(); +$opt_f = getFromURI($opt_f,$localhost,$opt_p); +my $user=getUserPart($opt_f); +my $socket = uconnect($opt_H, $opt_p); +my @localinfo = unpack_sockaddr_in($socket->sockname); +my $req = buildReq($localinfo[0], $opt_u, $opt_f,$user,$localhost); +my (undef, $starttime) = gettimeofday; +$socket->send($req); +my $response; +$socket->recv($response, 1024) or $state = 'CRITICAL'; + +#get rid of the 100 Trying - provisional response ... +if (getResponseCode($response) eq "100"){ +  $socket->recv($response, 1024) or $state = 'CRITICAL'; +} + +my (undef, $finishtime) = gettimeofday; +my $rtime = ($finishtime - $starttime) / 1000000; # Time taken in seconds +if(checkResponse($response,$rtime,$opt_s))  +{  +  if ($rtime > $opt_w) { $state = 'WARNING' } +  else { $state = 'OK' } +} +else { $state = 'CRITICAL' } + +exit $ERRORS{$state}; + +### Subroutines ############################################################## + + +sub uconnect +{ +  my ($host, $port) = @_; +  my $socket = new IO::Socket::INET->new(PeerPort=>$port, Proto=>'udp', PeerAddr=>$host); +  unless ($socket) { print "Unable to connect to $host\n"; exit $ERRORS{'UNKNOWN'} } +  return $socket; +} + +sub getFromURI{ +  my ($from, $localhost,$localport) = @_; +  if (!("$from" eq "")){ +    return "$from:$localport"; +  }else +  { +    return "sip:checksip\@$localhost:$localport"; +  } +} + +sub getUserPart{ +  my ($uri) = @_; +  my @uris=split(/\@/,$uri); +  my $user=$uris[0]; +  return $user; +} + +sub hostFromURI +{ +  my ($uri) = @_; +  $uri =~ s/sip:[^\@]+@//; +  return $uri; +} + +sub getResponseCode +{ +  my ($message) = @_; +  my @messageparts=split(/\ /,$message); +  return $messageparts[1]; +} + +sub buildReq +{ +  my ($localport, $dsturi, $fromuri,$user,$localhost) = @_; +   +  my $req; +  my $tag = genTag(); +  my $idtag = genTag(); +  $req.= "OPTIONS $dsturi SIP/2.0\r\n"; +  $req.= "Via: SIP/2.0/UDP $localhost:$localport;branch=z9hG4bKhjhs8ass877\r\n"; +  $req.= "Max-Forwards: 70\r\n"; +  $req.= "To: $dsturi\r\n"; +  $req.= "From: $fromuri;tag=$tag\r\n"; +  $req.= "Call-ID: $idtag\@$localhost\r\n"; +  $req.= "CSeq: 1 OPTIONS\r\n"; +  $req.= "Contact: <$user\@$localhost:$localport>\r\n"; +  $req.= "Accept: application/sdp\r\n"; +  $req.= "Content-Length: 0\r\n\r\n"; +  return $req; +} + +sub genTag +{ +  my $tag; +  my @chars = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', +  'q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8', +  '9'); + +  for (my $i = 0; $i < 6; $i++) +  { +    $tag .= $chars[rand(scalar @chars)]; +  } +  return $tag; +} + +sub printHelp +{ +  print "This plugin tests the sip service on the specified host.\n\n"; +  print "Usage: $PROGNAME -u sip:uri\@example.com [-H host -p PORT -f sip:fromuri\@example.com -w WARNTIME -s]\n"; +  print "       $PROGNAME [-h | --help]\n"; +  print "       $PROGNAME [-V | --version]\n\n"; +  print "Options:\n"; +  print " -u sip:uri\@example.com\n"; +  print "   Full SIP uri, eg sip:uri\@example.com\n"; | 
