<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 04/11/2014 03:14 PM, P J P wrote:<br>
    </div>
    <blockquote
      cite="mid:1397243665.16052.YahooMailNeo@web192404.mail.sg3.yahoo.com"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">On Saturday, 12 April 2014 12:40 AM, Bruno Wolff III wrote:
It looks like your proposal is going to break things for people using 
some wifi hotspots.
</pre>
      </blockquote>
      <pre wrap="">
  Why, how?
</pre>
    </blockquote>
    It's a hack designed to handle someone that just connected to the
    network and opened a browser, say.<br>
    Instead of blocking access, one runs a fake DNS system that responds
    with the captive portal's IP to every query.<br>
    The httpd service at that IP responds with an "enter your
    credentials to get network access" page to all URLs.<br>
    <br>
    An example of such fake DNS server is the following code resolving
    all queries to 192.168.123.45<br>
    <br>
    #!/usr/bin/perl <br>
     <br>
     use <a class="moz-txt-link-freetext" href="Net::DNS::Nameserver">Net::DNS::Nameserver</a>;<br>
     use strict;<br>
     use warnings;<br>
     <br>
     sub reply_handler {<br>
         my ($qname, $qclass, $qtype, $peerhost) = @_;<br>
         my ($rcode, @ans, @auth, @add);<br>
         <br>
         if ($qtype eq "A") {<br>
             my ($ttl, $rdata) = (3600, "192.168.123.45");<br>
             push @ans, <a class="moz-txt-link-freetext" href="Net::DNS::RR">Net::DNS::RR</a>-&gt;new("$qname $ttl $qclass $qtype
    $rdata");<br>
             $rcode = "NOERROR";<br>
         } else {<br>
             $rcode = "NXDOMAIN";<br>
         }<br>
         <br>
         # mark the answer as authoritive (by setting the 'aa' flag<br>
         return ($rcode, \@ans, \@auth, \@add, { aa =&gt; 1 });<br>
     }<br>
     <br>
     my $ns = <a class="moz-txt-link-freetext" href="Net::DNS::Nameserver">Net::DNS::Nameserver</a>-&gt;new(<br>
         LocalPort    =&gt; 53,<br>
         ReplyHandler =&gt; \&amp;reply_handler,<br>
         Verbose      =&gt; 0,<br>
     );<br>
     <br>
     if ($ns) {<br>
         $ns-&gt;main_loop;<br>
     } else {<br>
        die "couldn't create nameserver object\n";<br>
     }<br>
    <br>
  </body>
</html>