/[mdap]/bin/bootpd.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /bin/bootpd.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (hide annotations)
Sat Nov 17 00:12:12 2007 UTC (16 years, 4 months ago) by dpavlin
File MIME type: text/plain
File size: 1911 byte(s)
 r84@brr:  dpavlin | 2007-11-17 00:58:36 +0100
 simpliest possible bootp server (it seems to work)

1 dpavlin 61 #!/usr/bin/perl
2    
3     # based on http://www.perlmonks.org/index.pl?node_id=325248
4    
5     use strict;
6     use warnings;
7    
8     use IO::Socket::INET;
9     use Net::DHCP::Packet;
10     use Net::DHCP::Constants;
11     use Data::Dump qw/dump/;
12    
13     die "need to run $0 as root like this\nsudo $0\n" unless $< == 0;
14    
15     my $debug = 1;
16    
17     my $sock = IO::Socket::INET->new(
18     LocalPort => 67,
19     # LocalAddr => 'localhost',
20     # LocalAddr => '10.0.0.100',
21     LocalAddr => '0.0.0.0',
22     Proto => 'udp',
23     ReuseAddr => 1,
24     # PeerPort => getservbyname('bootpc', 'udp'),
25     Broadcast => 1,
26     Type => SOCK_DGRAM,
27     ) or die "Failed to bind to socket: $@";
28    
29     my $device = 'eth1';
30    
31     my $ip = '10.0.0.10';
32     my $ip_server = '10.0.0.100';
33    
34     while (1) {
35    
36     print "waiting for BOOTP requests on ",$sock->sockhost,":",$sock->sockport,"\n";
37    
38     my $buf;
39     $sock->recv($buf, 1024);
40     print "<< peer:",$sock->peerhost,":",$sock->peerport,"\n";
41    
42     if (defined $buf) {
43    
44     my $dhcp;
45    
46     eval { $dhcp = Net::DHCP::Packet->new($buf); };
47     die "can't use request", dump( $buf ) if $@;
48    
49     if ( $debug ) {
50     warn "recv: ", $dhcp->toString, "\n\n";
51     }
52    
53     my $packet = new Net::DHCP::Packet(
54     Op => BOOTREPLY(),
55     Hops => $dhcp->hops(),
56     Xid => $dhcp->xid(),
57     Flags => $dhcp->flags(),
58     Ciaddr => $dhcp->ciaddr(),
59     Yiaddr => $ip,
60     Siaddr => $ip_server,
61     Giaddr => $dhcp->giaddr(),
62     Chaddr => $dhcp->chaddr(),
63     File => $dhcp->file(),
64     # DHO_DHCP_MESSAGE_TYPE() => DHCPACK(),
65     DHO_SUBNET_MASK() => '255.0.0.0',
66     );
67    
68     warn ">> ",$sock->peeraddr,":",$sock->peerport," send $ip with server $ip_server\n",$packet->toString(),"\n";
69    
70     my $reply = IO::Socket::INET->new(
71     LocalAddr => '10.0.0.100',
72     LocalPort => 67,
73     Proto => "udp",
74     Broadcast => 1,
75     PeerAddr => '255.255.255.255',
76     PeerPort => 68,
77     Reuse => 1,
78     ) or die "socket: $@";
79    
80    
81     my $buff = $packet->serialize();
82     $reply->send( $buff, 0 ) or die "Error sending: $!\n";
83    
84     } else {
85     print "No bootp request.\n";
86     }
87    
88     }

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26