<pre class="python"><span style="color: #008000;">#!/usr/local/bin/python
</span>
<span style="color: #008000;"># $Id: knockd.py,v 1.5 2004/02/06 22:29:38 len Exp $
</span>
<span style="color: #008000;"># Latest version can be found at http://nemesisit.rdsnet.ro/len
</span>
<span style="color: #008000;"># Copyright (C) Marilen Corciovei <marilen.corciovei@nemesisit.ro>
</span><span style="color: #008000;">#
</span><span style="color: #008000;"># This program is free software; you can redistribute it and/or modify
</span><span style="color: #008000;"># it under the terms of the GNU General Public License as published by
</span><span style="color: #008000;"># the Free Software Foundation; either version 2 of the License, or
</span><span style="color: #008000;"># (at your option) any later version.  This program is distributed in
</span><span style="color: #008000;"># the hope that it will be useful, but WITHOUT ANY WARRANTY; without
</span><span style="color: #008000;"># even the implied warranty of MERCHANTABILITY or FITNESS FOR A
</span><span style="color: #008000;"># PARTICULAR PURPOSE.  See the GNU General Public License for more
</span><span style="color: #008000;"># details; it is available at <http://www.fsf.org/copyleft/gpl.html>
</span>
<span style="color: #004080;">""" knockd.py -- Demonstrate the portknock concept at server side """</span>
<span style="color: #004080;">""" FreeBSD with ipfw, python 2.2 """</span>

<span style="color: #c00000;">import</span> <span style="color: #000000;">time</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">re</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">os</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">sys</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">math</span>

<span style="color: #004080;">""" Configs. CHANGE FOR YOUR CONFIGURATION """</span>

<span style="color: #000000;">log_filename</span> <span style="color: #0000c0;">=</span>  <span style="color: #004080;">'/var/log/ipfw.log'</span>    <span style="color: #008000;">#change this to your log location</span>
<span style="color: #000000;">ipfw</span> <span style="color: #0000c0;">=</span> <span style="color: #004080;">'/sbin/ipfw'</span>                    <span style="color: #008000;">#full path of ipfw program </span>
<span style="color: #000000;">ifname</span> <span style="color: #0000c0;">=</span> <span style="color: #004080;">"my0"</span>                         <span style="color: #008000;">#interface name</span>
<span style="color: #000000;">mapsize</span> <span style="color: #0000c0;">=</span> <span style="color: #0080c0;">10</span>
<span style="color: #000000;">ipdest</span> <span style="color: #0000c0;">=</span> <span style="color: #004080;">"10.10.10.23"</span>                 <span style="color: #008000;">#your ip </span>
<span style="color: #000000;">openport</span> <span style="color: #0000c0;">=</span> <span style="color: #004080;">'22'</span>                        <span style="color: #008000;">#open this port</span>
<span style="color: #000000;">portseq</span> <span style="color: #0000c0;">=</span> <span style="color: #0000c0;">[</span><span style="color: #0080c0;">4005</span><span style="color: #0000c0;">,</span> <span style="color: #0080c0;">40034</span><span style="color: #0000c0;">,</span> <span style="color: #0080c0;">9001</span><span style="color: #0000c0;">]</span>          <span style="color: #008000;">#port sequence</span>
<span style="color: #000000;">tmdiff</span> <span style="color: #0000c0;">=</span> <span style="color: #0080c0;">10</span>                            <span style="color: #008000;">#max 10s delay betwheen knocks</span>

<span style="color: #004080;">""" Global """</span>
<span style="color: #000000;">vis</span> <span style="color: #0000c0;">=</span> <span style="color: #0000c0;">{</span><span style="color: #0000c0;">}</span>

<span style="color: #000000;">exp</span> <span style="color: #0000c0;">=</span> <span style="color: #004080;">"(\w\w\w\s{1,2}\d{1,2} \d\d:\d\d:\d\d) \w+ /kernel: ipfw: \d+ Deny \w+ (\d+\.\d+\.\d+\.\d+):(\d+) (\d+\.\d+\.\d+\.\d+):(\d+) in via "</span> <span style="color: #0000c0;">+</span> <span style="color: #000000;">ifname</span> <span style="color: #0000c0;">+</span> <span style="color: #004080;">"\s+"</span> <span style="color: #008000;">#change this to your format</span>

<span style="color: #000000;">p</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">re</span><span style="color: #0000c0;">.</span><span style="color: #000000;">compile</span><span style="color: #0000c0;">(</span><span style="color: #000000;">exp</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">re</span><span style="color: #0000c0;">.</span><span style="color: #000000;">IGNORECASE</span><span style="color: #0000c0;">)</span>

<span style="color: #c00000;">def</span> <span style="color: #000000;">daemonize</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span>
<span style="color: #004080;">""" Become a daemon"""</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">fork</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span> <span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">_exit</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">0</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">setsid</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">stdin</span>  <span style="color: #0000c0;">=</span> <span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">__stdin__</span>  <span style="color: #0000c0;">=</span> <span style="color: #000000;">open</span><span style="color: #0000c0;">(</span><span style="color: #004080;">'/dev/null'</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'r'</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">stdout</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">__stdout__</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">open</span><span style="color: #0000c0;">(</span><span style="color: #004080;">'/dev/null'</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'w'</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">stdout</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">__stderr__</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">dup</span><span style="color: #0000c0;">(</span><span style="color: #000000;">sys</span><span style="color: #0000c0;">.</span><span style="color: #000000;">stdout</span><span style="color: #0000c0;">.</span><span style="color: #000000;">fileno</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">)</span>

<span style="color: #c00000;">def</span> <span style="color: #000000;">gatekeeper</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">file</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">open</span><span style="color: #0000c0;">(</span><span style="color: #000000;">log_filename</span><span style="color: #0000c0;">,</span> <span style="color: #004080;">'r'</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">watcher</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">stat</span><span style="color: #0000c0;">(</span><span style="color: #000000;">log_filename</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">this_modified</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">last_modified</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">watcher</span><span style="color: #0000c0;">.</span><span style="color: #000000;">st_mtime</span>

<span style="color: #000000;">file</span><span style="color: #0000c0;">.</span><span style="color: #000000;">seek</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">0</span><span style="color: #0000c0;">,</span><span style="color: #0080c0;">2</span><span style="color: #0000c0;">)</span>

<span style="color: #c00000;">while</span> <span style="color: #0080c0;">1</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">this_modified</span> <span style="color: #0000c0;">></span> <span style="color: #000000;">last_modified</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">last_modified</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">this_modified</span>
<span style="color: #c00000;">while</span> <span style="color: #0080c0;">1</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">line</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">file</span><span style="color: #0000c0;">.</span><span style="color: #000000;">readline</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span>
<span style="color: #c00000;">if</span> <span style="color: #c00000;">not</span> <span style="color: #000000;">line</span><span style="color: #0000c0;">:</span> <span style="color: #c00000;">break</span>
<span style="color: #000000;">parse_log</span><span style="color: #0000c0;">(</span><span style="color: #000000;">line</span><span style="color: #0000c0;">)</span>

<span style="color: #000000;">watcher</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">stat</span><span style="color: #0000c0;">(</span><span style="color: #000000;">log_filename</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">this_modified</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">watcher</span><span style="color: #0000c0;">.</span><span style="color: #000000;">st_mtime</span>
<span style="color: #000000;">time</span><span style="color: #0000c0;">.</span><span style="color: #000000;">sleep</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">)</span>

<span style="color: #c00000;">def</span> <span style="color: #000000;">do_something</span><span style="color: #0000c0;">(</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">cmdparam</span> <span style="color: #0000c0;">=</span> <span style="color: #0000c0;">[</span><span style="color: #000000;">ipfw</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'add'</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'2010'</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'allow'</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'tcp'</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'from'</span><span style="color: #0000c0;">,</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'to'</span><span style="color: #0000c0;">,</span><span style="color: #000000;">ipdest</span><span style="color: #0000c0;">,</span><span style="color: #000000;">openport</span><span style="color: #0000c0;">,</span><span style="color: #004080;">'setup'</span><span style="color: #0000c0;">]</span>
<span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">spawnv</span><span style="color: #0000c0;">(</span><span style="color: #000000;">os</span><span style="color: #0000c0;">.</span><span style="color: #000000;">P_WAIT</span><span style="color: #0000c0;">,</span><span style="color: #000000;">ipfw</span><span style="color: #0000c0;">,</span><span style="color: #000000;">cmdparam</span><span style="color: #0000c0;">)</span>

<span style="color: #c00000;">def</span> <span style="color: #000000;">parse_log</span><span style="color: #0000c0;">(</span><span style="color: #000000;">line</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">from</span> <span style="color: #000000;">time</span> <span style="color: #c00000;">import</span> <span style="color: #000000;">strptime</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">strftime</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">mktime</span>

<span style="color: #c00000;">if</span> <span style="color: #000000;">line</span><span style="color: #0000c0;">.</span><span style="color: #000000;">find</span><span style="color: #0000c0;">(</span><span style="color: #004080;">'logfile turned over'</span><span style="color: #0000c0;">)</span> <span style="color: #0000c0;">!=</span> <span style="color: #0000c0;">-</span><span style="color: #0080c0;">1</span> <span style="color: #c00000;">and</span> <span style="color: #000000;">line</span><span style="color: #0000c0;">.</span><span style="color: #000000;">find</span><span style="color: #0000c0;">(</span><span style="color: #004080;">'newsyslog'</span><span style="color: #0000c0;">)</span> <span style="color: #0000c0;">!=</span> <span style="color: #0000c0;">-</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">print</span> <span style="color: #004080;">'Restart daemon'</span>
<span style="color: #000000;">m</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">p</span><span style="color: #0000c0;">.</span><span style="color: #000000;">match</span><span style="color: #0000c0;">(</span><span style="color: #000000;">line</span><span style="color: #0000c0;">)</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">m</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">when</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">m</span><span style="color: #0000c0;">.</span><span style="color: #000000;">group</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">tm</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">mktime</span><span style="color: #0000c0;">(</span><span style="color: #000000;">strptime</span><span style="color: #0000c0;">(</span><span style="color: #004080;">"2000 "</span> <span style="color: #0000c0;">+</span> <span style="color: #000000;">when</span><span style="color: #0000c0;">,</span> <span style="color: #004080;">"%Y %b %d %H:%M:%S"</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">)</span>
<span style="color: #008000;">#print strftime("%a, %d %b %Y %H:%M:%S +0000", tm)
</span>                <span style="color: #000000;">ipfrom</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">m</span><span style="color: #0000c0;">.</span><span style="color: #000000;">group</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">2</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">portfrom</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">int</span><span style="color: #0000c0;">(</span><span style="color: #000000;">m</span><span style="color: #0000c0;">.</span><span style="color: #000000;">group</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">3</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">ipdest</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">m</span><span style="color: #0000c0;">.</span><span style="color: #000000;">group</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">4</span><span style="color: #0000c0;">)</span>
<span style="color: #000000;">portdest</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">int</span><span style="color: #0000c0;">(</span><span style="color: #000000;">m</span><span style="color: #0000c0;">.</span><span style="color: #000000;">group</span><span style="color: #0000c0;">(</span><span style="color: #0080c0;">5</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">)</span>
<span style="color: #008000;">#print ipfrom, ipdest, portdest
</span>                <span style="color: #c00000;">if</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">.</span><span style="color: #000000;">has_key</span><span style="color: #0000c0;">(</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">ltm</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">]</span><span style="color: #0000c0;">[</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">]</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">math</span><span style="color: #0000c0;">.</span><span style="color: #000000;">fabs</span><span style="color: #0000c0;">(</span><span style="color: #000000;">tm</span> <span style="color: #0000c0;">-</span> <span style="color: #000000;">ltm</span><span style="color: #0000c0;">)</span> <span style="color: #0000c0;"><</span> <span style="color: #000000;">tmdiff</span><span style="color: #0000c0;">:</span> <span style="color: #008000;">#accepted interval</span>
<span style="color: #000000;">lp</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">]</span><span style="color: #0000c0;">[</span><span style="color: #0080c0;">0</span><span style="color: #0000c0;">]</span> <span style="color: #008000;">#which port in sequence</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">portseq</span><span style="color: #0000c0;">[</span><span style="color: #000000;">lp</span><span style="color: #0000c0;">]</span> <span style="color: #0000c0;">==</span> <span style="color: #000000;">portdest</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">lp</span> <span style="color: #0000c0;">==</span> <span style="color: #000000;">len</span><span style="color: #0000c0;">(</span><span style="color: #000000;">portseq</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">-</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">:</span> <span style="color: #008000;">#last port found</span>
<span style="color: #c00000;">print</span> <span style="color: #004080;">"Knock, knock from"</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">,</span> <span style="color: #004080;">"at"</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">when</span>
<span style="color: #c00000;">try</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">do_something</span><span style="color: #0000c0;">(</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">)</span>
<span style="color: #c00000;">except</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">print</span> <span style="color: #004080;">'Could not open port'</span>
<span style="color: #c00000;">del</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">]</span>
<span style="color: #c00000;">else</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">]</span> <span style="color: #0000c0;">=</span> <span style="color: #0000c0;">[</span><span style="color: #000000;">lp</span><span style="color: #0000c0;">+</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">tm</span><span style="color: #0000c0;">]</span>
<span style="color: #c00000;">else</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">del</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">]</span>

<span style="color: #c00000;">elif</span> <span style="color: #000000;">portdest</span> <span style="color: #0000c0;">==</span> <span style="color: #000000;">portseq</span><span style="color: #0000c0;">[</span><span style="color: #0080c0;">0</span><span style="color: #0000c0;">]</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">ipfrom</span><span style="color: #0000c0;">]</span> <span style="color: #0000c0;">=</span> <span style="color: #0000c0;">[</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">,</span><span style="color: #000000;">tm</span><span style="color: #0000c0;">]</span>

<span style="color: #c00000;">else</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">print</span> <span style="color: #004080;">'No match'</span>

<span style="color: #008000;">#clean the map for expired entries
</span>        <span style="color: #c00000;">if</span> <span style="color: #000000;">len</span><span style="color: #0000c0;">(</span><span style="color: #000000;">vis</span><span style="color: #0000c0;">)</span> <span style="color: #0000c0;">></span> <span style="color: #000000;">mapsize</span><span style="color: #0000c0;">:</span>
<span style="color: #c00000;">print</span> <span style="color: #004080;">'Cleaning map'</span>
<span style="color: #000000;">tm</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">mktime</span><span style="color: #0000c0;">(</span><span style="color: #000000;">strptime</span><span style="color: #0000c0;">(</span><span style="color: #004080;">"2000 "</span> <span style="color: #0000c0;">+</span> <span style="color: #000000;">when</span><span style="color: #0000c0;">,</span> <span style="color: #004080;">"%Y %b %d %H:%M:%S"</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">)</span>
<span style="color: #c00000;">for</span> <span style="color: #000000;">k</span><span style="color: #0000c0;">,</span> <span style="color: #000000;">v</span> <span style="color: #c00000;">in</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">.</span><span style="color: #000000;">items</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span><span style="color: #0000c0;">:</span>
<span style="color: #000000;">ltm</span> <span style="color: #0000c0;">=</span> <span style="color: #000000;">v</span><span style="color: #0000c0;">[</span><span style="color: #0080c0;">1</span><span style="color: #0000c0;">]</span>
<span style="color: #c00000;">if</span> <span style="color: #000000;">math</span><span style="color: #0000c0;">.</span><span style="color: #000000;">fabs</span><span style="color: #0000c0;">(</span><span style="color: #000000;">tm</span> <span style="color: #0000c0;">-</span> <span style="color: #000000;">ltm</span><span style="color: #0000c0;">)</span> <span style="color: #0000c0;">></span> <span style="color: #000000;">tmdiff</span><span style="color: #0000c0;">:</span> <span style="color: #008000;">#expired</span>
<span style="color: #c00000;">del</span> <span style="color: #000000;">vis</span><span style="color: #0000c0;">[</span><span style="color: #000000;">k</span><span style="color: #0000c0;">]</span>

<span style="color: #c00000;">if</span> <span style="color: #000000;">__name__</span><span style="color: #0000c0;">==</span><span style="color: #004080;">'__main__'</span><span style="color: #0000c0;">:</span>
<span style="color: #008000;">#daemonize()
</span>        <span style="color: #000000;">gatekeeper</span><span style="color: #0000c0;">(</span><span style="color: #0000c0;">)</span>