From 96da49de996335e8a8af10bc4057e6ec57ed2d48 Mon Sep 17 00:00:00 2001 From: angryziber Date: Sun, 15 Jul 2007 20:49:41 +0000 Subject: [PATCH] Some new fetchers: * PortTextFetcher - generic fetcher for fetching some text from ports * WebDetectFetcher - uses PortTextFetcher for detecting the web servers * LastAliveTimeFetcher - another not yet implemented fetcher git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/trunk@158 375186e5-ef17-0410-b0b6-91563547dcda --- .../azib/ipscan/config/ComponentRegistry.java | 2 + .../ipscan/fetchers/LastAliveTimeFetcher.java | 40 ++++++++ .../azib/ipscan/fetchers/PortTextFetcher.java | 92 +++++++++++++++++++ .../ipscan/fetchers/WebDetectFetcher.java | 22 +++++ 4 files changed, 156 insertions(+) create mode 100644 src/net/azib/ipscan/fetchers/LastAliveTimeFetcher.java create mode 100644 src/net/azib/ipscan/fetchers/PortTextFetcher.java create mode 100644 src/net/azib/ipscan/fetchers/WebDetectFetcher.java diff --git a/src/net/azib/ipscan/config/ComponentRegistry.java b/src/net/azib/ipscan/config/ComponentRegistry.java index 3ebdb433..f0b74b54 100755 --- a/src/net/azib/ipscan/config/ComponentRegistry.java +++ b/src/net/azib/ipscan/config/ComponentRegistry.java @@ -24,6 +24,7 @@ import net.azib.ipscan.fetchers.IPFetcher; import net.azib.ipscan.fetchers.PingFetcher; import net.azib.ipscan.fetchers.PingTTLFetcher; import net.azib.ipscan.fetchers.PortsFetcher; +import net.azib.ipscan.fetchers.WebDetectFetcher; import net.azib.ipscan.gui.MainMenu; import net.azib.ipscan.gui.MainWindow; import net.azib.ipscan.gui.OptionsDialog; @@ -90,6 +91,7 @@ public class ComponentRegistry { container.registerComponentImplementation(HostnameFetcher.class); container.registerComponentImplementation(PortsFetcher.class); container.registerComponentImplementation(FilteredPortsFetcher.class); + container.registerComponentImplementation(WebDetectFetcher.class); container.registerComponentImplementation(PingerRegistry.class, PingerRegistryImpl.class); container.registerComponentImplementation(ScanningResultList.class); diff --git a/src/net/azib/ipscan/fetchers/LastAliveTimeFetcher.java b/src/net/azib/ipscan/fetchers/LastAliveTimeFetcher.java new file mode 100644 index 00000000..5ec0f20e --- /dev/null +++ b/src/net/azib/ipscan/fetchers/LastAliveTimeFetcher.java @@ -0,0 +1,40 @@ +/** + * This file is a part of Angry IP Scanner source code, + * see http://www.azib.net/ for more information. + * Licensed under GPLv2. + */ + +package net.azib.ipscan.fetchers; + +import net.azib.ipscan.core.ScanningSubject; + +/** + * LastAliveTimeFetcher + * + * TODO: implement LastAliveTimeFetcher + * + * @author Anton Keks + */ +public class LastAliveTimeFetcher implements Fetcher { + + public void cleanup() { + // TODO Auto-generated method stub + + } + + public String getLabel() { + // TODO Auto-generated method stub + return null; + } + + public void init() { + // TODO Auto-generated method stub + + } + + public Object scan(ScanningSubject subject) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/net/azib/ipscan/fetchers/PortTextFetcher.java b/src/net/azib/ipscan/fetchers/PortTextFetcher.java new file mode 100644 index 00000000..4c72c153 --- /dev/null +++ b/src/net/azib/ipscan/fetchers/PortTextFetcher.java @@ -0,0 +1,92 @@ +/** + * This file is a part of Angry IP Scanner source code, + * see http://www.azib.net/ for more information. + * Licensed under GPLv2. + */ + +package net.azib.ipscan.fetchers; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketTimeoutException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.azib.ipscan.config.GlobalConfig; +import net.azib.ipscan.config.LoggerFactory; +import net.azib.ipscan.core.ScanningSubject; + +/** + * PortTextFetcher - generic configurable fetcher to read some particular information from a port. + * + * @author Anton Keks + */ +public class PortTextFetcher implements Fetcher { + private static final Logger LOG = LoggerFactory.getLogger(); + + private GlobalConfig globalConfig; + + private int port; + private String textToSend; + private Pattern matchingRegexp; + + public PortTextFetcher(GlobalConfig globalConfig, int port, String textToSend, String matchingRegexp) { + this.globalConfig = globalConfig; + this.port = port; + this.textToSend = textToSend; + this.matchingRegexp = Pattern.compile(matchingRegexp); + } + + public void cleanup() { + } + + public String getLabel() { + return "fetcher.webDetect"; + } + + public void init() { + } + + public Object scan(ScanningSubject subject) { + Socket socket = new Socket(); + try { + // TODO: use adapted port timeout if it is configured to do so + socket.connect(new InetSocketAddress(subject.getIPAddress(), port), globalConfig.portTimeout); + socket.setTcpNoDelay(true); + socket.setSoTimeout(globalConfig.portTimeout); + socket.setSoLinger(true, 0); + + socket.getOutputStream().write(textToSend.getBytes()); + + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + Matcher matcher = matchingRegexp.matcher(line); + if (matcher.matches()) { + // mark that additional info is available + subject.setResultType(ScanningSubject.RESULT_TYPE_ADDITIONAL_INFO); + // return the required contents + return matcher.group(1); + } + } + } + catch (SocketTimeoutException e) { + } + catch (IOException e) { + LOG.log(Level.FINE, subject.getIPAddress().toString(), e); + } + finally { + try { + socket.close(); + } + catch (IOException e) {} + } + return null; + } + +} diff --git a/src/net/azib/ipscan/fetchers/WebDetectFetcher.java b/src/net/azib/ipscan/fetchers/WebDetectFetcher.java new file mode 100644 index 00000000..273732c5 --- /dev/null +++ b/src/net/azib/ipscan/fetchers/WebDetectFetcher.java @@ -0,0 +1,22 @@ +/** + * This file is a part of Angry IP Scanner source code, + * see http://www.azib.net/ for more information. + * Licensed under GPLv2. + */ + +package net.azib.ipscan.fetchers; + +import net.azib.ipscan.config.GlobalConfig; + +/** + * WebDetectFetcher - detects the Web server software running on scanned hosts. + * + * @author Anton Keks + */ +public class WebDetectFetcher extends PortTextFetcher { + + public WebDetectFetcher(GlobalConfig globalConfig) { + super(globalConfig, 80, "HEAD /robots.txt HTTP/1.0\r\n\r\n", "^[Ss]erver:\\s+(.*)$"); + } + +}