Java implementation of Recog that supports parsing and matching.
Recog content (the XML files containing matchers) is maintained at the upstream recog project. The recog-java tests are configured to download a versioned archive of that repository in order to use the content for testing. The content is otherwise not deployed or handled by the recog-java project, so any consumers of recog-java must provide the content they need.
Add the dependency to your pom file:
<dependency>
<groupId>com.rapid7.recog</groupId>
<artifactId>recog-java</artifactId>
<version>0.7.0</version>
</dependency>
Implement a simple Recog client:
public class RecogClient implements Recog {
private RecogMatchersProvider provider;
public RecogClient(File matchersDirectory) {
this.provider = new RecogMatchersProvider(BUILTIN, matchersDirectory);
}
@Override
public List<RecogMatchResult> fingerprint(String description) {
List<RecogMatchResult> matches = new ArrayList<>();
for (RecogMatchers matchers : provider.getMatchers(BUILTIN)) {
for (RecogMatch match : matchers.getMatches(description)) {
RecogMatcher matcher = match.getMatcher();
matches.add(new RecogMatchResult(matchers.getKey(), matchers.getType(), matchers.getProtocol(), matchers.getPreference(), match.getMatcher().getDescription(), matcher.getPattern(), matcher.getExamples(), match.getParameters()));
}
}
return matches;
}
@Override
public RecogVersion refreshContent() {
throw new UnsupportedOperationException("Not implemented.");
}
}
Fingerprint some input:
RecogClient recog = new RecogClient(new File("path/to/recog/xml/"));
List<RecogMatchResult> matchResults = recog.fingerprint("Apache HTTPD 6.5");
// draw the rest of the owl...
By default, recog-java uses Java's standard regular expression package, java.util.regex
. To use a different implementation, users can implement their own RecogPatternMatcher
instance:
import com.rapid7.recog.pattern.RecogPatternMatcher;
public class CustomPatternMatcher implements RecogPatternMatcher {
// custom implementation...
}
RecogPatternMatcher patternMatcher = new CustomPatternMatcher("^Apache HTTPD (?<version>.*)$");
RecogMatcher matcher = new RecogMatcher(patternMatcher);
Map<String, String> results = matcher.match("Apache HTTPD 6.5");
This library is not yet at a 1:1 parity with the original rapid7/recog Ruby implementation.
Missing features:
- Matching against multi-line input strings
- Command line tools like
recog_match
Fork the repository and create a development branch in your fork. Working from the master branch in your fork is not recommended.
- Open your favorite IDE or text editor
- Make some changes
- Add some tests if needed
- Run the tests
- Push your changes
- Open a pull request
You can use mvn clean install
to clean compile, run checkstyle, and run all tests.
recog-java uses a variation of the Google Java code style, enforced with Checkstyle. Please make sure your changes adhere to this style before submitting a pull request.
Run mvn test
or mvn clean install
.