Esempio n. 1
0
import pathlib
import subprocess
import threading
from collections import defaultdict
from itertools import islice
from typing import Dict, Optional, Set, Tuple, Iterable, List, Iterator

from ipsiblings import logsetup
from ipsiblings.evaluation.keyscan.property import KeyscanResult
from ipsiblings.model import const

log = logsetup.get_root_logger()


class KeyscanProcessHandler:
    """
    Handles ssh-keyscan interaction for a single process.
    """

    def __init__(self, cwd: pathlib.Path, ip_version: int, timeout: int):
        self._cwd = cwd
        self.ip_version = ip_version
        self.timeout = timeout
        self.results: Dict[str, KeyscanResult] = {}
        self.thread: Optional[threading.Thread] = None
        self.failed = False

    def start(self, in_addrs: Set[str]):
        if not in_addrs:
            log.info(f'No input addresses for keyscan {self.ip_version}, skipping.')
            return
Esempio n. 2
0
import contextlib
import csv
import pathlib
from typing import Dict

from ipsiblings.evaluation.model import SiblingStatus
from ipsiblings.evaluation.stats.model import Stats, CrossStats
from ipsiblings.logsetup import get_root_logger
from ipsiblings.model.const import EvaluatorChoice

log = get_root_logger()

FIL_SIBLINGS = 'siblings.st.tsv'
FIL_STARKE_SIBLINGS = 'starke-siblings.st.tsv'
FIL_MULTI_SIBLINGS = 'multi-siblings.st.tsv'
FIL_STATUSES = 'classifications.sum.st.tsv'
FIL_CROSS_STATS = 'cross-stats.sum.st.tsv'
FIL_PEER_STATS_4 = 'peer-stats.v4.st.tsv'
FIL_PEER_STATS_6 = 'peer-stats.v6.st.tsv'

COL_SIBLINGS_4 = 'ip4'
COL_SIBLINGS_6 = 'ip6'
COLS_SIBLINGS = [COL_SIBLINGS_4, COL_SIBLINGS_6]

COL_STATUS_KEY = 'evaluator'
COLS_STATUSES = [COL_STATUS_KEY] + [c.name for c in SiblingStatus]

COL_CS_KEY = 'algorithm'
COLPFX_CS_POSITIVE = 'pos_'
COLPFX_CS_NEGATIVE = 'neg_'
COLIFX_CS_TRUE_STATUS = 'was_'