package com.netifera.platform.net.internal.services.detection;
import java.util.List;
import java.util.Map;
import com.netifera.platform.net.services.detection.IClientDetectorService;
import com.netifera.platform.net.services.detection.INetworkServiceDetector;
import com.netifera.platform.net.services.detection.INetworkServiceDetectorProvider;
import com.netifera.platform.util.patternmatching.IPattern;
public class ClientDetectorService extends NetworkServiceDetectorService implements IClientDetectorService {
protected void registerDetectorProvider(INetworkServiceDetectorProvider provider) {
for (INetworkServiceDetector each: provider.getClientDetectors())
addDetector(each);
}
protected void unregisterDetectorProvider(INetworkServiceDetectorProvider provider) {
// epa!
}
public Map<String,String> detect(String protocol, int port,
String trigger, String response) {
List<INetworkServiceDetector> detectors = this.detectors.get(protocol);
if (detectors == null)
return null;
for (INetworkServiceDetector each: detectors) {
if (each.getPorts() != null && !each.getPorts().contains(port)) continue;
Map<String,String> result = each.detect(trigger, response);
if (result != null) {
if (!result.containsKey("banner") && isPrintable(trigger))
result.put("banner", trigger);
String os = result.get("os");
if (os == null || os.equals("Unix"))
for (IPattern osDetector: genericOSDetectors)
if (osDetector.match(result, trigger))
break;
if (result.get("arch") == null)
for (IPattern archDetector: genericArchDetectors)
if (archDetector.match(result, trigger))
break;
return result;
}
}
return null;
}
}