FlowPrint

The FlowPrint object that is used to generate Fingerprint’s. Note that this is mainly a wrapper method, the actual Fingerprint generation is done in the FingerprintGenerator.

class flowprint.FlowPrint(batch=300, window=30, correlation=0.1, similarity=0.9, threshold=0.1)

FlowPrint object for creating fingerprints from mobile network traffic

batch

Threshold for the batch size in seconds

Type:float
window

Threshold for the window size in seconds

Type:float
correlation

Threshold for the minimum required correlation

Type:float
similarity

Threshold for the minimum required similarity

Type:float
threshold

Threshold for anomaly detection

Type:float
fingerprinter

FingerprintGenerator used for generating fingerprints

Type:fingerprints.FingerprintGenerator
fingerprints

Dictionary of Fingerprint -> label, containing all fingerprints generated by FlowPrint

Type:dict
FlowPrint.__init__(batch=300, window=30, correlation=0.1, similarity=0.9, threshold=0.1)

FlowPrint object for creating fingerprints from mobile network traffic

Parameters:
  • batch (float, default=300) – Threshold for the batch size in seconds
  • window (float, default=30) – Threshold for the window size in seconds
  • correlation (float, default=0.1) – Threshold for the minimum required correlation
  • similarity (float, default=0.9) – Threshold for the minimum required similarity
  • threshold (float, default=0.1) – Threshold for anomaly detection

Generating fingerprints

FlowPrint.fit(X, y=None)

Fit FlowPrint object with fingerprints from given flows.

Parameters:
  • X (np.array of shape=(n_samples,)) – Flows for fitting FlowPrint.
  • y (np.array of shape=(n_samples,), optional) – If given, attach labels to fingerprints from X.
Returns:

self – Returns FlowPrint object

Return type:

self

FlowPrint.predict(X, y=None, default='common')

Find closest fingerprint to trained fingerprints

Parameters:
  • X (Array-like of Fingerprint of shape=(n_fingerprints,)) – Fingerprints to compare against training set.
  • y (ignored) –
  • default (‘common’|’largest’|other, default=’common’) –
    Default to this strategy if no match is found
    • ’common’ : return the fingerprint with most flows
    • ’largest’: return the largest fingerprint
    • other: return <other> as match, e.g. Fingerprint()/None
Returns:

result – Closest matching fingerprints to original. If no match is found, fall back on default

Return type:

np.array of shape=(n_fingerprints,)

FlowPrint.fit_predict(X, y=None, default='common')

Fit FlowPrint with samples and labels and return the predictions of the same samples after running them through FlowPrint.

Parameters:
  • X (np.array of shape=(n_samples,)) – Flows for fitting FlowPrint.
  • y (np.array of shape=(n_samples,), optional) – If given, attach labels to fingerprints from X.
  • default (‘common’|’largest’|other, default=’common’) –
    Default to this strategy if no match is found
    • ’common’ : return the fingerprint with most flows
    • ’largest’: return the largest fingerprint
    • other: return <other> as match, e.g. Fingerprint()/None
Returns:

result – Closest matching fingerprints to original. If no match is found, fall back on default

Return type:

np.array of shape=(n_fingerprints,)

App Recognition

Once FlowPrint is trained using the fit(), you can use FlowPrint to label unknown Flows with known apps.

FlowPrint.recognize(X, y=None, default='common')

Return labels corresponding to closest matching fingerprints

Parameters:
  • X (Array-like of Fingerprint of shape=(n_fingerprints,)) – Fingerprints to compare against training set.
  • y (ignored) –
  • default (‘common’|’largest’|other, default=’common’) –
    Default to this strategy if no match is found
    • ’common’ : return the fingerprint with most flows
    • ’largest’: return the largest fingerprint
    • other: return <other> as match, e.g. Fingerprint()/None
Returns:

result – Label of closest matching fingerprints to original

Return type:

np.array of shape=(n_fingerprints,)

Unseen app detection

Once FlowPrint is trained using the fit(), you can use FlowPrint to detect if unknown Flows are in the set of known (trained) apps or if they are a previously unseen app.

FlowPrint.detect(X, y=None, threshold=None)

Predict whether samples of X are anomalous or not.

Parameters:
  • X (np.array of shape=(n_samples,)) – Flows for fitting FlowPrint.
  • y (Ignored) –
  • threshold (float, default=None) – Minimum required threshold to consider point benign. If None is given, use FlowPrint default
Returns:

result – Prediction of samples in X: +1 if benign, -1 if anomalous.

Return type:

np.array of shape=(n_samples,)

I/O methods

FlowPrint provides methods to save and load a FlowPrint object, including its fingerprints to a json file.

FlowPrint.save(file, fingerprints=None)

Save fingerprints to file.

Parameters:
  • file (string) – File in which to save flowprint fingerprints.
  • fingerprints (iterable of Fingerprint (optional)) – If None export fingerprints from fitted FlowPrint object, otherwise, export given fingerprints.
FlowPrint.load(*files, store=True, parameters=False)

Load fingerprints from files.

Parameters:
  • file (string) – Files from which to load fingerprints.
  • store (boolean, default=True) – If True, store fingerprints in FlowPrint object
  • parameters (boolean, default=False) – If True, also update FlowPrint parameters from file
Returns:

result – Fingerprints imported from file.

Return type:

dict of Fingerprint -> label