569 lines
43 KiB
HTML
569 lines
43 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<html><head><title>Python: module nmap</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
</head><body bgcolor="#f0f0f8">
|
|
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
|
|
<tr bgcolor="#7799ee">
|
|
<td valign=bottom> <br>
|
|
<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong>nmap</strong></big></big> (version 0.3.4)</font></td
|
|
><td align=right valign=bottom
|
|
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/xael/ESPACE_KM/python/python-nmap/nmap/nmap.py">/home/xael/ESPACE_KM/python/python-nmap/nmap/nmap.py</a></font></td></tr></table>
|
|
<p><tt>nmap.py - version and date, see below<br>
|
|
<br>
|
|
Source code : https://code.google.com/p/python-nmap/<br>
|
|
<br>
|
|
Author :<br>
|
|
<br>
|
|
* Alexandre Norman - norman at xael.org<br>
|
|
<br>
|
|
Contributors:<br>
|
|
<br>
|
|
* Steve 'Ashcrow' Milner - steve at gnulinux.net<br>
|
|
* Brian Bustin - brian at bustin.us<br>
|
|
* old.schepperhand<br>
|
|
* Johan Lundberg<br>
|
|
* Thomas D. maaaaz<br>
|
|
* Robert Bost<br>
|
|
<br>
|
|
Licence : GPL v3 or any later version<br>
|
|
<br>
|
|
<br>
|
|
This program is free software: you can redistribute it and/or modify<br>
|
|
it under the terms of the GNU General Public License as published by<br>
|
|
the Free Software Foundation, either version 3 of the License, or<br>
|
|
any later version.<br>
|
|
<br>
|
|
This program is distributed in the hope that it will be useful,<br>
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
|
|
GNU General Public License for more details.<br>
|
|
<br>
|
|
You should have received a copy of the GNU General Public License<br>
|
|
along with this program. If not, see <<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>>.<br>
|
|
<br>
|
|
<br>
|
|
Test strings :<br>
|
|
^^^^^^^^^^^^<br>
|
|
>>> import nmap<br>
|
|
>>> if __get_last_online_version() != __version__:<br>
|
|
... raise ValueError('Current version is {0} - Last published version is {1}'.format(__version__, __get_last_online_version()))<br>
|
|
>>> nm = nmap.<a href="#PortScanner">PortScanner</a>()<br>
|
|
>>> try:<br>
|
|
... nm.scan(arguments='-wrongargs')<br>
|
|
... except nmap.<a href="#PortScannerError">PortScannerError</a>:<br>
|
|
... pass<br>
|
|
>>> 'error' in nm.scan('yahoo.fs', arguments='-sP')['nmap']['scaninfo']<br>
|
|
True<br>
|
|
>>> r=nm.scan('127.0.0.1', '22-25')<br>
|
|
>>> r=nm.analyse_nmap_xml_scan(open('../scanme_output.xml').read())<br>
|
|
>>> nm.command_line()<br>
|
|
'./nmap-6.40/nmap -sV -oX scanme_output.xml scanme.nmap.org'<br>
|
|
>>> nm.scaninfo()<br>
|
|
{'tcp': {'services': '1,3-4,6-7,9,13,17,19-26,30,32-33,37,42-43,49,53,70,79-85,88-90,99-100,106,109-111,113,119,125,135,139,143-144,146,161,163,179,199,211-212,222,254-256,259,264,280,301,306,311,340,366,389,406-407,416-417,425,427,443-445,458,464-465,481,497,500,512-515,524,541,543-545,548,554-555,563,587,593,616-617,625,631,636,646,648,666-668,683,687,691,700,705,711,714,720,722,726,749,765,777,783,787,800-801,808,843,873,880,888,898,900-903,911-912,981,987,990,992-993,995,999-1002,1007,1009-1011,1021-1100,1102,1104-1108,1110-1114,1117,1119,1121-1124,1126,1130-1132,1137-1138,1141,1145,1147-1149,1151-1152,1154,1163-1166,1169,1174-1175,1183,1185-1187,1192,1198-1199,1201,1213,1216-1218,1233-1234,1236,1244,1247-1248,1259,1271-1272,1277,1287,1296,1300-1301,1309-1311,1322,1328,1334,1352,1417,1433-1434,1443,1455,1461,1494,1500-1501,1503,1521,1524,1533,1556,1580,1583,1594,1600,1641,1658,1666,1687-1688,1700,1717-1721,1723,1755,1761,1782-1783,1801,1805,1812,1839-1840,1862-1864,1875,1900,1914,1935,1947,1971-1972,1974,1984,1998-2010,2013,2020-2022,2030,2033-2035,2038,2040-2043,2045-2049,2065,2068,2099-2100,2103,2105-2107,2111,2119,2121,2126,2135,2144,2160-2161,2170,2179,2190-2191,2196,2200,2222,2251,2260,2288,2301,2323,2366,2381-2383,2393-2394,2399,2401,2492,2500,2522,2525,2557,2601-2602,2604-2605,2607-2608,2638,2701-2702,2710,2717-2718,2725,2800,2809,2811,2869,2875,2909-2910,2920,2967-2968,2998,3000-3001,3003,3005-3007,3011,3013,3017,3030-3031,3052,3071,3077,3128,3168,3211,3221,3260-3261,3268-3269,3283,3300-3301,3306,3322-3325,3333,3351,3367,3369-3372,3389-3390,3404,3476,3493,3517,3527,3546,3551,3580,3659,3689-3690,3703,3737,3766,3784,3800-3801,3809,3814,3826-3828,3851,3869,3871,3878,3880,3889,3905,3914,3918,3920,3945,3971,3986,3995,3998,4000-4006,4045,4111,4125-4126,4129,4224,4242,4279,4321,4343,4443-4446,4449,4550,4567,4662,4848,4899-4900,4998,5000-5004,5009,5030,5033,5050-5051,5054,5060-5061,5080,5087,5100-5102,5120,5190,5200,5214,5221-5222,5225-5226,5269,5280,5298,5357,5405,5414,5431-5432,5440,5500,5510,5544,5550,5555,5560,5566,5631,5633,5666,5678-5679,5718,5730,5800-5802,5810-5811,5815,5822,5825,5850,5859,5862,5877,5900-5904,5906-5907,5910-5911,5915,5922,5925,5950,5952,5959-5963,5987-5989,5998-6007,6009,6025,6059,6100-6101,6106,6112,6123,6129,6156,6346,6389,6502,6510,6543,6547,6565-6567,6580,6646,6666-6669,6689,6692,6699,6779,6788-6789,6792,6839,6881,6901,6969,7000-7002,7004,7007,7019,7025,7070,7100,7103,7106,7200-7201,7402,7435,7443,7496,7512,7625,7627,7676,7741,7777-7778,7800,7911,7920-7921,7937-7938,7999-8002,8007-8011,8021-8022,8031,8042,8045,8080-8090,8093,8099-8100,8180-8181,8192-8194,8200,8222,8254,8290-8292,8300,8333,8383,8400,8402,8443,8500,8600,8649,8651-8652,8654,8701,8800,8873,8888,8899,8994,9000-9003,9009-9011,9040,9050,9071,9080-9081,9090-9091,9099-9103,9110-9111,9200,9207,9220,9290,9415,9418,9485,9500,9502-9503,9535,9575,9593-9595,9618,9666,9876-9878,9898,9900,9917,9929,9943-9944,9968,9998-10004,10009-10010,10012,10024-10025,10082,10180,10215,10243,10566,10616-10617,10621,10626,10628-10629,10778,11110-11111,11967,12000,12174,12265,12345,13456,13722,13782-13783,14000,14238,14441-14442,15000,15002-15004,15660,15742,16000-16001,16012,16016,16018,16080,16113,16992-16993,17877,17988,18040,18101,18988,19101,19283,19315,19350,19780,19801,19842,20000,20005,20031,20221-20222,20828,21571,22939,23502,24444,24800,25734-25735,26214,27000,27352-27353,27355-27356,27715,28201,30000,30718,30951,31038,31337,32768-32785,33354,33899,34571-34573,35500,38292,40193,40911,41511,42510,44176,44442-44443,44501,45100,48080,49152-49161,49163,49165,49167,49175-49176,49400,49999-50003,50006,50300,50389,50500,50636,50800,51103,51493,52673,52822,52848,52869,54045,54328,55055-55056,55555,55600,56737-56738,57294,57797,58080,60020,60443,61532,61900,62078,63331,64623,64680,65000,65129,65389', 'method': 'connect'}}<br>
|
|
>>> nm.all_hosts()<br>
|
|
['74.207.244.221']<br>
|
|
>>> nm['74.207.244.221'].hostname()<br>
|
|
'scanme.nmap.org'<br>
|
|
>>> nm['74.207.244.221'].state()<br>
|
|
'up'<br>
|
|
>>> nm['74.207.244.221'].all_protocols()<br>
|
|
['addresses', 'tcp', 'vendor']<br>
|
|
>>> nm['74.207.244.221']['tcp'].keys()<br>
|
|
dict_keys([80, 9929, 22])<br>
|
|
>>> nm['74.207.244.221'].has_tcp(22)<br>
|
|
True<br>
|
|
>>> nm['74.207.244.221'].has_tcp(23)<br>
|
|
False<br>
|
|
>>> nm['74.207.244.221']['tcp'][22]<br>
|
|
{'product': 'OpenSSH', 'state': 'open', 'version': '5.3p1 Debian 3ubuntu7', 'name': 'ssh', 'conf': '10', 'extrainfo': 'Ubuntu Linux; protocol 2.0', 'reason': 'syn-ack', 'cpe': 'cpe:/o:linux:linux_kernel'}<br>
|
|
>>> nm['74.207.244.221']['tcp'][22] == nm['74.207.244.221'].tcp(22)<br>
|
|
True<br>
|
|
>>> nm['74.207.244.221']['tcp'][22]['state']<br>
|
|
'open'<br>
|
|
>>> nm.scanstats()['uphosts']<br>
|
|
'1'<br>
|
|
>>> nm.scanstats()['downhosts']<br>
|
|
'0'<br>
|
|
>>> nm.scanstats()['totalhosts']<br>
|
|
'1'<br>
|
|
>>> 'timestr' in nm.scanstats().keys()<br>
|
|
True<br>
|
|
>>> 'elapsed' in nm.scanstats().keys()<br>
|
|
True<br>
|
|
>>> nm.listscan('192.168.1.0/30')<br>
|
|
['192.168.1.0', '192.168.1.1', '192.168.1.2', '192.168.1.3']<br>
|
|
>>> nm.listscan('localhost/30')<br>
|
|
['127.0.0.0', '127.0.0.1', '127.0.0.2', '127.0.0.3']<br>
|
|
>>> import os<br>
|
|
>>> if os.getuid() == 0:<br>
|
|
... r=nm.scan('127.0.0.1', arguments='-O')<br>
|
|
... len(nm['127.0.0.1']['osclass'])>0<br>
|
|
... len(nm.csv()) > 0<br>
|
|
... else:<br>
|
|
... True<br>
|
|
... True<br>
|
|
True<br>
|
|
True<br>
|
|
>>> if os.getuid() == 0:<br>
|
|
... r=nm.scan(hosts='127.0.0.1', ports='139', arguments="-sC -T4")<br>
|
|
>>> if os.getuid() == 0:<br>
|
|
... nm['127.0.0.1']['hostscript'][0].keys()<br>
|
|
dict_keys(['output', 'id'])<br>
|
|
>>> if os.getuid() == 0:<br>
|
|
... r=nm.scan('192.168.0.254', arguments='-O')<br>
|
|
... len(nm['192.168.0.254']['vendor']) > 0<br>
|
|
... else:<br>
|
|
... True<br>
|
|
True</tt></p>
|
|
<p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#aa55cc">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
|
|
|
|
<tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td>
|
|
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="collections.html">collections</a><br>
|
|
<a href="csv.html">csv</a><br>
|
|
<a href="io.html">io</a><br>
|
|
</td><td width="25%" valign=top><a href="os.html">os</a><br>
|
|
<a href="re.html">re</a><br>
|
|
<a href="shlex.html">shlex</a><br>
|
|
</td><td width="25%" valign=top><a href="string.html">string</a><br>
|
|
<a href="subprocess.html">subprocess</a><br>
|
|
<a href="sys.html">sys</a><br>
|
|
</td><td width="25%" valign=top><a href="types.html">types</a><br>
|
|
<a href="xml.html">xml</a><br>
|
|
</td></tr></table></td></tr></table><p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#ee77aa">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
|
|
|
|
<tr><td bgcolor="#ee77aa"><tt> </tt></td><td> </td>
|
|
<td width="100%"><dl>
|
|
<dt><font face="helvetica, arial"><a href="builtins.html#Exception">builtins.Exception</a>(<a href="builtins.html#BaseException">builtins.BaseException</a>)
|
|
</font></dt><dd>
|
|
<dl>
|
|
<dt><font face="helvetica, arial"><a href="nmap.html#PortScannerError">PortScannerError</a>
|
|
</font></dt></dl>
|
|
</dd>
|
|
<dt><font face="helvetica, arial"><a href="builtins.html#dict">builtins.dict</a>(<a href="builtins.html#object">builtins.object</a>)
|
|
</font></dt><dd>
|
|
<dl>
|
|
<dt><font face="helvetica, arial"><a href="nmap.html#PortScannerHostDict">PortScannerHostDict</a>
|
|
</font></dt></dl>
|
|
</dd>
|
|
<dt><font face="helvetica, arial"><a href="builtins.html#object">builtins.object</a>
|
|
</font></dt><dd>
|
|
<dl>
|
|
<dt><font face="helvetica, arial"><a href="nmap.html#PortScanner">PortScanner</a>
|
|
</font></dt><dt><font face="helvetica, arial"><a href="nmap.html#PortScannerAsync">PortScannerAsync</a>
|
|
</font></dt><dd>
|
|
<dl>
|
|
<dt><font face="helvetica, arial"><a href="nmap.html#PortScannerYield">PortScannerYield</a>
|
|
</font></dt></dl>
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
<p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#ffc8d8">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#000000" face="helvetica, arial"><a name="PortScanner">class <strong>PortScanner</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
|
|
|
|
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
|
|
<td colspan=2><tt><a href="#PortScanner">PortScanner</a> class allows to use nmap from python<br> </tt></td></tr>
|
|
<tr><td> </td>
|
|
<td width="100%">Methods defined here:<br>
|
|
<dl><dt><a name="PortScanner-__getitem__"><strong>__getitem__</strong></a>(self, host)</dt><dd><tt>returns a host detail</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-__init__"><strong>__init__</strong></a>(self, nmap_search_path<font color="#909090">=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap')</font>)</dt><dd><tt>Initialize <a href="#PortScanner">PortScanner</a> module<br>
|
|
<br>
|
|
* detects nmap on the system and nmap version<br>
|
|
* may raise <a href="#PortScannerError">PortScannerError</a> exception if nmap is not found in the path<br>
|
|
<br>
|
|
:param nmap_search_path: tupple of string where to search for nmap executable. Change this if you want to use a specific version of nmap.<br>
|
|
:returns: nothing</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-all_hosts"><strong>all_hosts</strong></a>(self)</dt><dd><tt>returns a sorted list of all hosts</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-analyse_nmap_xml_scan"><strong>analyse_nmap_xml_scan</strong></a>(self, nmap_xml_output<font color="#909090">=None</font>, nmap_err<font color="#909090">=''</font>, nmap_err_keep_trace<font color="#909090">=''</font>)</dt><dd><tt>Analyses NMAP xml scan ouput<br>
|
|
<br>
|
|
May raise <a href="#PortScannerError">PortScannerError</a> exception if nmap output was not xml<br>
|
|
<br>
|
|
Test existance of the following key to know if something went wrong : ['nmap']['scaninfo']['error']<br>
|
|
If not present, everything was ok.<br>
|
|
<br>
|
|
:param nmap_xml_output: xml string to analyse<br>
|
|
:returns: scan_result as dictionnary</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-command_line"><strong>command_line</strong></a>(self)</dt><dd><tt>returns command line used for the scan<br>
|
|
<br>
|
|
may raise AssertionError exception if called before scanning</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-csv"><strong>csv</strong></a>(self)</dt><dd><tt>returns CSV output as text<br>
|
|
<br>
|
|
Example :<br>
|
|
host;protocol;port;name;state;product;extrainfo;reason;version;conf;cpe<br>
|
|
127.0.0.1;tcp;22;ssh;open;OpenSSH;protocol 2.0;syn-ack;5.9p1 Debian 5ubuntu1;10;cpe<br>
|
|
127.0.0.1;tcp;23;telnet;closed;;;conn-refused;;3;<br>
|
|
127.0.0.1;tcp;24;priv-mail;closed;;;conn-refused;;3;</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-get_nmap_last_output"><strong>get_nmap_last_output</strong></a>(self)</dt><dd><tt>Returns the last text output of nmap in raw text<br>
|
|
this may be used for debugging purpose<br>
|
|
<br>
|
|
:returns: string containing the last text output of nmap in raw text</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-has_host"><strong>has_host</strong></a>(self, host)</dt><dd><tt>returns True if host has result, False otherwise</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-listscan"><strong>listscan</strong></a>(self, hosts<font color="#909090">='127.0.0.1'</font>)</dt><dd><tt>do not scan but interpret target hosts and return a list a hosts</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-nmap_version"><strong>nmap_version</strong></a>(self)</dt><dd><tt>returns nmap version if detected (int version, int subversion)<br>
|
|
or (0, 0) if unknown<br>
|
|
:returns: (nmap_version_number, nmap_subversion_number)</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-scan"><strong>scan</strong></a>(self, hosts<font color="#909090">='127.0.0.1'</font>, ports<font color="#909090">=None</font>, arguments<font color="#909090">='-sV'</font>)</dt><dd><tt>Scan given hosts<br>
|
|
<br>
|
|
May raise <a href="#PortScannerError">PortScannerError</a> exception if nmap output was not xml<br>
|
|
<br>
|
|
Test existance of the following key to know if something went wrong : ['nmap']['scaninfo']['error']<br>
|
|
If not present, everything was ok.<br>
|
|
<br>
|
|
hosts = string for hosts as nmap use it 'scanme.nmap.org' or '198.116.0-255.1-127' or '216.163.128.20/20'<br>
|
|
ports = string for ports as nmap use it '22,53,110,143-4564'<br>
|
|
arguments = string of arguments for nmap '-sU -sX -sC'<br>
|
|
<br>
|
|
:returns: scan_result as dictionnary</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-scaninfo"><strong>scaninfo</strong></a>(self)</dt><dd><tt>returns scaninfo structure<br>
|
|
{'tcp': {'services': '22', 'method': 'connect'}}<br>
|
|
<br>
|
|
may raise AssertionError exception if called before scanning</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScanner-scanstats"><strong>scanstats</strong></a>(self)</dt><dd><tt>returns scanstats structure<br>
|
|
{'uphosts': '3', 'timestr': 'Thu Jun 3 21:45:07 2010', 'downhosts': '253', 'totalhosts': '256', 'elapsed': '5.79'}<br>
|
|
<br>
|
|
may raise AssertionError exception if called before scanning</tt></dd></dl>
|
|
|
|
<hr>
|
|
Data descriptors defined here:<br>
|
|
<dl><dt><strong>__dict__</strong></dt>
|
|
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
|
|
</dl>
|
|
<dl><dt><strong>__weakref__</strong></dt>
|
|
<dd><tt>list of weak references to the object (if defined)</tt></dd>
|
|
</dl>
|
|
</td></tr></table> <p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#ffc8d8">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#000000" face="helvetica, arial"><a name="PortScannerAsync">class <strong>PortScannerAsync</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
|
|
|
|
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
|
|
<td colspan=2><tt><a href="#PortScannerAsync">PortScannerAsync</a> allows to use nmap from python asynchronously<br>
|
|
for each host scanned, callback is called with scan result for the host<br> </tt></td></tr>
|
|
<tr><td> </td>
|
|
<td width="100%">Methods defined here:<br>
|
|
<dl><dt><a name="PortScannerAsync-__del__"><strong>__del__</strong></a>(self)</dt><dd><tt>Cleanup when deleted</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerAsync-__init__"><strong>__init__</strong></a>(self)</dt><dd><tt>Initialize the module<br>
|
|
<br>
|
|
* detects nmap on the system and nmap version<br>
|
|
* may raise <a href="#PortScannerError">PortScannerError</a> exception if nmap is not found in the path</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerAsync-scan"><strong>scan</strong></a>(self, hosts<font color="#909090">='127.0.0.1'</font>, ports<font color="#909090">=None</font>, arguments<font color="#909090">='-sV'</font>, callback<font color="#909090">=None</font>)</dt><dd><tt>Scan given hosts in a separate process and return host by host result using callback function<br>
|
|
<br>
|
|
<a href="#PortScannerError">PortScannerError</a> exception from standard nmap is catched and you won't know about it<br>
|
|
<br>
|
|
:param hosts: string for hosts as nmap use it 'scanme.nmap.org' or '198.116.0-255.1-127' or '216.163.128.20/20'<br>
|
|
:param ports: string for ports as nmap use it '22,53,110,143-4564'<br>
|
|
:param arguments: string of arguments for nmap '-sU -sX -sC'<br>
|
|
:param callback: callback function which takes (host, scan_data) as arguments</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerAsync-still_scanning"><strong>still_scanning</strong></a>(self)</dt><dd><tt>:returns: True if a scan is currently running, False otherwise</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerAsync-stop"><strong>stop</strong></a>(self)</dt><dd><tt>Stop the current scan process</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerAsync-wait"><strong>wait</strong></a>(self, timeout<font color="#909090">=None</font>)</dt><dd><tt>Wait for the current scan process to finish, or timeout<br>
|
|
<br>
|
|
:param timeout: default = None, wait timeout seconds</tt></dd></dl>
|
|
|
|
<hr>
|
|
Data descriptors defined here:<br>
|
|
<dl><dt><strong>__dict__</strong></dt>
|
|
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
|
|
</dl>
|
|
<dl><dt><strong>__weakref__</strong></dt>
|
|
<dd><tt>list of weak references to the object (if defined)</tt></dd>
|
|
</dl>
|
|
</td></tr></table> <p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#ffc8d8">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#000000" face="helvetica, arial"><a name="PortScannerError">class <strong>PortScannerError</strong></a>(<a href="builtins.html#Exception">builtins.Exception</a>)</font></td></tr>
|
|
|
|
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
|
|
<td colspan=2><tt><a href="builtins.html#Exception">Exception</a> error class for <a href="#PortScanner">PortScanner</a> class<br> </tt></td></tr>
|
|
<tr><td> </td>
|
|
<td width="100%"><dl><dt>Method resolution order:</dt>
|
|
<dd><a href="nmap.html#PortScannerError">PortScannerError</a></dd>
|
|
<dd><a href="builtins.html#Exception">builtins.Exception</a></dd>
|
|
<dd><a href="builtins.html#BaseException">builtins.BaseException</a></dd>
|
|
<dd><a href="builtins.html#object">builtins.object</a></dd>
|
|
</dl>
|
|
<hr>
|
|
Methods defined here:<br>
|
|
<dl><dt><a name="PortScannerError-__init__"><strong>__init__</strong></a>(self, value)</dt></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-__repr__"><strong>__repr__</strong></a>(self)</dt></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-__str__"><strong>__str__</strong></a>(self)</dt></dl>
|
|
|
|
<hr>
|
|
Data descriptors defined here:<br>
|
|
<dl><dt><strong>__weakref__</strong></dt>
|
|
<dd><tt>list of weak references to the object (if defined)</tt></dd>
|
|
</dl>
|
|
<hr>
|
|
Data and other attributes inherited from <a href="builtins.html#Exception">builtins.Exception</a>:<br>
|
|
<dl><dt><strong>__new__</strong> = <built-in method __new__ of type object><dd><tt>T.<a href="#PortScannerError-__new__">__new__</a>(S, ...) -> a new <a href="builtins.html#object">object</a> with type S, a subtype of T</tt></dl>
|
|
|
|
<hr>
|
|
Methods inherited from <a href="builtins.html#BaseException">builtins.BaseException</a>:<br>
|
|
<dl><dt><a name="PortScannerError-__delattr__"><strong>__delattr__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerError-__delattr__">__delattr__</a>('name') <==> del x.name</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerError-__getattribute__">__getattribute__</a>('name') <==> x.name</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-__reduce__"><strong>__reduce__</strong></a>(...)</dt></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-__setattr__"><strong>__setattr__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerError-__setattr__">__setattr__</a>('name', value) <==> x.name = value</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-__setstate__"><strong>__setstate__</strong></a>(...)</dt></dl>
|
|
|
|
<dl><dt><a name="PortScannerError-with_traceback"><strong>with_traceback</strong></a>(...)</dt><dd><tt><a href="builtins.html#Exception">Exception</a>.<a href="#PortScannerError-with_traceback">with_traceback</a>(tb) --<br>
|
|
set self.<strong>__traceback__</strong> to tb and return self.</tt></dd></dl>
|
|
|
|
<hr>
|
|
Data descriptors inherited from <a href="builtins.html#BaseException">builtins.BaseException</a>:<br>
|
|
<dl><dt><strong>__cause__</strong></dt>
|
|
<dd><tt>exception cause</tt></dd>
|
|
</dl>
|
|
<dl><dt><strong>__context__</strong></dt>
|
|
<dd><tt>exception context</tt></dd>
|
|
</dl>
|
|
<dl><dt><strong>__dict__</strong></dt>
|
|
</dl>
|
|
<dl><dt><strong>__traceback__</strong></dt>
|
|
</dl>
|
|
<dl><dt><strong>args</strong></dt>
|
|
</dl>
|
|
</td></tr></table> <p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#ffc8d8">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#000000" face="helvetica, arial"><a name="PortScannerHostDict">class <strong>PortScannerHostDict</strong></a>(<a href="builtins.html#dict">builtins.dict</a>)</font></td></tr>
|
|
|
|
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
|
|
<td colspan=2><tt>Special dictionnary class for storing and accessing host scan result<br> </tt></td></tr>
|
|
<tr><td> </td>
|
|
<td width="100%"><dl><dt>Method resolution order:</dt>
|
|
<dd><a href="nmap.html#PortScannerHostDict">PortScannerHostDict</a></dd>
|
|
<dd><a href="builtins.html#dict">builtins.dict</a></dd>
|
|
<dd><a href="builtins.html#object">builtins.object</a></dd>
|
|
</dl>
|
|
<hr>
|
|
Methods defined here:<br>
|
|
<dl><dt><a name="PortScannerHostDict-all_ip"><strong>all_ip</strong></a>(self)</dt><dd><tt>:returns: list of ip ports</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-all_protocols"><strong>all_protocols</strong></a>(self)</dt><dd><tt>:returns: a list of all scanned protocols</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-all_sctp"><strong>all_sctp</strong></a>(self)</dt><dd><tt>:returns: list of sctp ports</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-all_tcp"><strong>all_tcp</strong></a>(self)</dt><dd><tt>:returns: list of tcp ports</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-all_udp"><strong>all_udp</strong></a>(self)</dt><dd><tt>:returns: list of udp ports</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-has_ip"><strong>has_ip</strong></a>(self, port)</dt><dd><tt>:param port: (int) ip port<br>
|
|
:returns: True if ip port has info, False otherwise</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-has_sctp"><strong>has_sctp</strong></a>(self, port)</dt><dd><tt>:returns: True if sctp port has info, False otherwise</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-has_tcp"><strong>has_tcp</strong></a>(self, port)</dt><dd><tt>:param port: (int) tcp port<br>
|
|
:returns: True if tcp port has info, False otherwise</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-has_udp"><strong>has_udp</strong></a>(self, port)</dt><dd><tt>:param port: (int) udp port<br>
|
|
:returns: True if udp port has info, False otherwise</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-hostname"><strong>hostname</strong></a>(self)</dt><dd><tt>:returns: hostname</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-ip"><strong>ip</strong></a>(self, port)</dt><dd><tt>:param port: (int) ip port<br>
|
|
:returns: info for ip port</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-sctp"><strong>sctp</strong></a>(self, port)</dt><dd><tt>:returns: info for sctp port</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-state"><strong>state</strong></a>(self)</dt><dd><tt>:returns: host state</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-tcp"><strong>tcp</strong></a>(self, port)</dt><dd><tt>:param port: (int) tcp port<br>
|
|
:returns: info for tpc port</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-udp"><strong>udp</strong></a>(self, port)</dt><dd><tt>:param port: (int) udp port<br>
|
|
:returns: info for udp port</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-uptime"><strong>uptime</strong></a>(self)</dt><dd><tt>:returns: host state</tt></dd></dl>
|
|
|
|
<hr>
|
|
Data descriptors defined here:<br>
|
|
<dl><dt><strong>__dict__</strong></dt>
|
|
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
|
|
</dl>
|
|
<dl><dt><strong>__weakref__</strong></dt>
|
|
<dd><tt>list of weak references to the object (if defined)</tt></dd>
|
|
</dl>
|
|
<hr>
|
|
Methods inherited from <a href="builtins.html#dict">builtins.dict</a>:<br>
|
|
<dl><dt><a name="PortScannerHostDict-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-__contains__">__contains__</a>(k) -> True if D has a key k, else False</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__delitem__">__delitem__</a>(y) <==> del x[y]</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__eq__">__eq__</a>(y) <==> x==y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__ge__">__ge__</a>(y) <==> x>=y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__getattribute__">__getattribute__</a>('name') <==> x.name</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__getitem__">__getitem__</a>(y) <==> x[y]</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__gt__">__gt__</a>(y) <==> x>y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__init__"><strong>__init__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__init__">__init__</a>(...) initializes x; see help(type(x)) for signature</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__iter__">__iter__</a>() <==> iter(x)</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__le__">__le__</a>(y) <==> x<=y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__len__">__len__</a>() <==> len(x)</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__lt__">__lt__</a>(y) <==> x<y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__ne__">__ne__</a>(y) <==> x!=y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__repr__">__repr__</a>() <==> repr(x)</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#PortScannerHostDict-__setitem__">__setitem__</a>(i, y) <==> x[i]=y</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-__sizeof__">__sizeof__</a>() -> size of D in memory, in bytes</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-clear">clear</a>() -> None. Remove all items from D.</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-copy">copy</a>() -> a shallow copy of D</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-fromkeys"><strong>fromkeys</strong></a>(...)</dt><dd><tt><a href="builtins.html#dict">dict</a>.<a href="#PortScannerHostDict-fromkeys">fromkeys</a>(S[,v]) -> New <a href="builtins.html#dict">dict</a> with keys from S and values equal to v.<br>
|
|
v defaults to None.</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-get">get</a>(k[,d]) -> D[k] if k in D, else d. d defaults to None.</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-items">items</a>() -> a set-like <a href="builtins.html#object">object</a> providing a view on D's items</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-keys">keys</a>() -> a set-like <a href="builtins.html#object">object</a> providing a view on D's keys</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-pop">pop</a>(k[,d]) -> v, remove specified key and return the corresponding value.<br>
|
|
If key is not found, d is returned if given, otherwise KeyError is raised</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-popitem">popitem</a>() -> (k, v), remove and return some (key, value) pair as a<br>
|
|
2-tuple; but raise KeyError if D is empty.</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-setdefault">setdefault</a>(k[,d]) -> D.<a href="#PortScannerHostDict-get">get</a>(k,d), also set D[k]=d if k not in D</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-update">update</a>([E, ]**F) -> None. Update D from <a href="builtins.html#dict">dict</a>/iterable E and F.<br>
|
|
If E present and has a .<a href="#PortScannerHostDict-keys">keys</a>() method, does: for k in E: D[k] = E[k]<br>
|
|
If E present and lacks .<a href="#PortScannerHostDict-keys">keys</a>() method, does: for (k, v) in E: D[k] = v<br>
|
|
In either case, this is followed by: for k in F: D[k] = F[k]</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerHostDict-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#PortScannerHostDict-values">values</a>() -> an <a href="builtins.html#object">object</a> providing a view on D's values</tt></dd></dl>
|
|
|
|
<hr>
|
|
Data and other attributes inherited from <a href="builtins.html#dict">builtins.dict</a>:<br>
|
|
<dl><dt><strong>__hash__</strong> = None</dl>
|
|
|
|
<dl><dt><strong>__new__</strong> = <built-in method __new__ of type object><dd><tt>T.<a href="#PortScannerHostDict-__new__">__new__</a>(S, ...) -> a new <a href="builtins.html#object">object</a> with type S, a subtype of T</tt></dl>
|
|
|
|
</td></tr></table> <p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#ffc8d8">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#000000" face="helvetica, arial"><a name="PortScannerYield">class <strong>PortScannerYield</strong></a>(<a href="nmap.html#PortScannerAsync">PortScannerAsync</a>)</font></td></tr>
|
|
|
|
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
|
|
<td colspan=2><tt><a href="#PortScannerYield">PortScannerYield</a> allows to use nmap from python with a generator<br>
|
|
for each host scanned, yield is called with scan result for the host<br> </tt></td></tr>
|
|
<tr><td> </td>
|
|
<td width="100%"><dl><dt>Method resolution order:</dt>
|
|
<dd><a href="nmap.html#PortScannerYield">PortScannerYield</a></dd>
|
|
<dd><a href="nmap.html#PortScannerAsync">PortScannerAsync</a></dd>
|
|
<dd><a href="builtins.html#object">builtins.object</a></dd>
|
|
</dl>
|
|
<hr>
|
|
Methods defined here:<br>
|
|
<dl><dt><a name="PortScannerYield-__init__"><strong>__init__</strong></a>(self)</dt><dd><tt>Initialize the module<br>
|
|
<br>
|
|
* detects nmap on the system and nmap version<br>
|
|
* may raise <a href="#PortScannerError">PortScannerError</a> exception if nmap is not found in the path</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerYield-scan"><strong>scan</strong></a>(self, hosts<font color="#909090">='127.0.0.1'</font>, ports<font color="#909090">=None</font>, arguments<font color="#909090">='-sV'</font>)</dt><dd><tt>Scan given hosts in a separate process and return host by host result using callback function<br>
|
|
<br>
|
|
<a href="#PortScannerError">PortScannerError</a> exception from standard nmap is catched and you won't know about it<br>
|
|
<br>
|
|
:param hosts: string for hosts as nmap use it 'scanme.nmap.org' or '198.116.0-255.1-127' or '216.163.128.20/20'<br>
|
|
:param ports: string for ports as nmap use it '22,53,110,143-4564'<br>
|
|
:param arguments: string of arguments for nmap '-sU -sX -sC'<br>
|
|
:param callback: callback function which takes (host, scan_data) as arguments</tt></dd></dl>
|
|
|
|
<dl><dt><a name="PortScannerYield-still_scanning"><strong>still_scanning</strong></a>(self)</dt></dl>
|
|
|
|
<dl><dt><a name="PortScannerYield-stop"><strong>stop</strong></a>(self)</dt></dl>
|
|
|
|
<dl><dt><a name="PortScannerYield-wait"><strong>wait</strong></a>(self, timeout<font color="#909090">=None</font>)</dt></dl>
|
|
|
|
<hr>
|
|
Methods inherited from <a href="nmap.html#PortScannerAsync">PortScannerAsync</a>:<br>
|
|
<dl><dt><a name="PortScannerYield-__del__"><strong>__del__</strong></a>(self)</dt><dd><tt>Cleanup when deleted</tt></dd></dl>
|
|
|
|
<hr>
|
|
Data descriptors inherited from <a href="nmap.html#PortScannerAsync">PortScannerAsync</a>:<br>
|
|
<dl><dt><strong>__dict__</strong></dt>
|
|
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
|
|
</dl>
|
|
<dl><dt><strong>__weakref__</strong></dt>
|
|
<dd><tt>list of weak references to the object (if defined)</tt></dd>
|
|
</dl>
|
|
</td></tr></table></td></tr></table><p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#eeaa77">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
|
|
|
|
<tr><td bgcolor="#eeaa77"><tt> </tt></td><td> </td>
|
|
<td width="100%"><dl><dt><a name="-convert_nmap_output_to_encoding"><strong>convert_nmap_output_to_encoding</strong></a>(value, code<font color="#909090">='ascii'</font>)</dt><dd><tt>Change encoding for scan_result <a href="builtins.html#object">object</a> from unicode to whatever<br>
|
|
<br>
|
|
:param value: scan_result as dictionnary<br>
|
|
:param code: default = "ascii", encoding destination<br>
|
|
<br>
|
|
:returns: scan_result as dictionnary with new encoding</tt></dd></dl>
|
|
</td></tr></table><p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#55aa55">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
|
|
|
|
<tr><td bgcolor="#55aa55"><tt> </tt></td><td> </td>
|
|
<td width="100%"><strong>__last_modification__</strong> = '2014.06.22'</td></tr></table><p>
|
|
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
|
<tr bgcolor="#7799ee">
|
|
<td colspan=3 valign=bottom> <br>
|
|
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
|
|
|
|
<tr><td bgcolor="#7799ee"><tt> </tt></td><td> </td>
|
|
<td width="100%">Alexandre Norman (norman@xael.org)</td></tr></table>
|
|
</body></html> |