1+ # !/usr/bin/env perl
2+ use strict;
3+ use POE;
4+ use POE::Component::DHCP::Monitor;
5+ use Net::DHCP::Packet;
6+
7+ $| =1;
8+
9+ POE::Session-> create(
10+ inline_states => {
11+ _start => \&_start,
12+ dhcp_monitor_packet => \&dhcp_monitor_packet,
13+ _default => \&_default,
14+ },
15+ );
16+
17+ $poe_kernel -> run();
18+ exit 0;
19+
20+ sub _start {
21+ my ($kernel ,$heap ) = @_ [KERNEL,HEAP];
22+ $heap -> {monitor } =
23+ POE::Component::DHCP::Monitor-> spawn(
24+ alias => ' monitor' , # optional
25+ port1 => 67, # default shown
26+ port2 => 68, # default shown
27+ # address => '192.168.1.1', # default is INADDR_ANY
28+ );
29+ return ;
30+ }
31+
32+ sub dhcp_monitor_packet {
33+ my ($kernel ,$heap ,$packet ) = @_ [KERNEL,HEAP,ARG0];
34+ print STDOUT $packet -> toString();
35+ print STDOUT " =============================================================================\n " ;
36+ return ;
37+ }
38+
39+ sub _default {
40+ my ($event , $args ) = @_ [ARG0 .. $#_ ];
41+ my @output = ( " $event : " );
42+
43+ for my $arg (@$args ) {
44+ if ( ref $arg eq ' ARRAY' ) {
45+ push ( @output , ' [' . join (' , ' , @$arg ) . ' ]' );
46+ }
47+ else {
48+ push ( @output , " '$arg '" );
49+ }
50+ }
51+ print join ' ' , @output , " \n " ;
52+ return ;
53+ }
0 commit comments