Nmap Development mailing list archives
Re: Java API for NMap
From: Jon Svede <jsvede () gmail com>
Date: Wed, 19 May 2010 11:35:31 -0600
Thanks for the feedback! I've only briefly looked at the Perl API and their approach is similar to what I am thinking of. I have a high level approach sketched out that currently is using the Process class as you suggest. Well, actually that is already written. :-) My goal was more focused on what would be useful to someone who wanted to use the API. So for example, in my previous experience, what would have been useful is something like this: ... ... String[] hosts = {"locahost", "intranetbox.domain.com","externalhost.anotherdomain.com"}; String ports = "22,80,389,443,8080,7001"; ServiceScan scan = new ServiceScan( hosts, ports ) ; scan.execute() ; //synchronous - so this blocks ScanResult result = scan.getResults() ; Another example might be: MyCallback callback = new MyCallback() ; //instance of a Callback interface that is part of the API String[] hosts = {"locahost", "intranetbox.domain.com","externalhost.anotherdomain.com"}; String ports = "22,80,389,443,8080,7001"; ServiceScan scan = new ServiceScan( hosts, ports, callback ) ; scan.execute() ; // because we passed in a Callback, it's asynchronous now It's a contrived example but my goal is to make it very easy to use NMap with Java in simple use cases but also make it possible for expert NMap users to define their own classes for commonly run scans. I've used NMap only for host discovery - finding boxes with services exposed. I am certain there are more use cases that are commonly used that would be equally convenient to encapsulate in a class. While I could do the Python to Java thing, for my purposes a pure a Java API is more desirable. I suspect other Java developers might agree as this cuts down the number of other things that have be accounted for when building an app. XML parsing would be via SAX to avoid hitting out of memory errors on large scans. Additionally, this approach allows users of the API to hook into the parser notifications as well. Jon On Wed, May 19, 2010 at 11:09 AM, Giorgio Zoppi <giorgio.zoppi () gmail com> wrote:
I recommend looking at the APIs of the Perl and Ruby interfaces to Nmap. These have already been tested by some real-world use. http://nmap.org/book/output-formats-xml-with-perl.html http://sourceforge.net/projects/nmap-scanner/ http://anthonypersaud.com/category/nmap-parser/ http://rubynmap.sourceforge.net/Currently there's an other valuable option. As far i know Zenmap it's written in python and there are some python modules (i.e http://nmap.org/svn/zenmap/zenmapCore/NmapCommand.py) which are used to instruct nmap (correct me David if i'm wrong). An option could be Jepp - http://jepp.sourceforge.net/ which embeds CPython in Java and then you could use that module. - For a pure Java option you might use (just sketching one possible solution): String processExe; Runtime runtime = Runtime.getRuntime() processExe = "/usr/bin/nmap" /* cmdarray is an array which contains the nmap options, see the doc*/ cmdarray[0] = processExe cmdarray[1] = ....... etc. runtime.exec(cmdarray) and then parse the xml results with your DOM or SAX parser. Unfortunately Nmap currently don't have a frontend C API, so using Java JNI is not a possible solution to your problem. Just 1c, Giorgio. -- Quiero ser el rayo de sol que cada día te despierta para hacerte respirar y vivir en me. "Favola -Moda".
_______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://seclists.org/nmap-dev/
Current thread:
- Java API for NMap Jon Svede (May 19)
- Re: Java API for NMap David Fifield (May 19)
- Re: Java API for NMap Giorgio Zoppi (May 22)
- Re: Java API for NMap Jon Svede (May 22)
- Re: Java API for NMap Giorgio Zoppi (May 22)
- Re: Java API for NMap David Fifield (May 19)