ans.pl revision 8c76634f88c5b3169b61505925e10b997ea08e54
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews#!/usr/bin/perl
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews#
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# Copyright (C) 2000, 2001 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# Permission to use, copy, modify, and/or distribute this software for any
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews# purpose with or without fee is hereby granted, provided that the above
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews# copyright notice and this permission notice appear in all copies.
28a8f5b0de57d269cf2845c69cb6abe18cbd3b3aMark Andrews#
f31f0b63cbe841720f154c570bcdede9d79e64b8Michael Graff# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
f31f0b63cbe841720f154c570bcdede9d79e64b8Michael Graff# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
854d0238dbc2908490197984b3b9d558008a53dfMark Andrews# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
854d0238dbc2908490197984b3b9d558008a53dfMark Andrews# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews# PERFORMANCE OF THIS SOFTWARE.
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews# $Id: ans.pl,v 1.9 2007/09/24 04:13:25 marka Exp $
8360c3dc0f8ab25f4839c79e30d6865838d9a4daBob Halley
8360c3dc0f8ab25f4839c79e30d6865838d9a4daBob Halley#
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews# Ad hoc name server
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews#
6324997211a5e2d82528dcde98e8981190a35faeMichael Graff
6324997211a5e2d82528dcde98e8981190a35faeMichael Graffuse IO::File;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsuse IO::Socket;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsuse Net::DNS;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsuse Net::DNS::Packet;
b9e911c71cf0fbdc054b5bc7ef1a3233e2b4a4faAutomatic Updater
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsmy $sock = IO::Socket::INET->new(LocalAddr => "10.53.0.3",
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews LocalPort => 5300, Proto => "udp") or die "$!";
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsmy $pidf = new IO::File "ans.pid", "w" or die "cannot open pid file: $!";
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsprint $pidf "$$\n" or die "cannot write pid file: $!";
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews$pidf->close or die "cannot close pid file: $!";
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewssub rmpid { unlink "ans.pid"; exit 1; };
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews$SIG{INT} = \&rmpid;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews$SIG{TERM} = \&rmpid;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrewsfor (;;) {
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews $sock->recv($buf, 512);
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews print "**** request from " , $sock->peerhost, " port ", $sock->peerport, "\n";
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews my ($packet, $err) = new Net::DNS::Packet(\$buf, 0);
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews $err and die $err;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews print "REQUEST:\n";
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews $packet->print;
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews $packet->header->qr(1);
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews $packet->push("answer", new Net::DNS::RR("www.example.com 300 A 1.2.3.4"));
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff $sock->send($packet->data);
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence
cae06bceda6c5d415f740574a64f42bf5f561d61Mark Andrews print "RESPONSE:\n";
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews $packet->print;
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews print "\n";
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews}
44a966dff66061ac3f266c6b451a70733eb78e82Mark Andrews