Eu posso resolver sua terceira pergunta.
Uma maneira totalmente diferente de identificar um sistema operacional é usar o p0f de Michal Zalewski. p0f adivinha sistemas operacionais baseados em sinalizadores específicos e outras características de pacotes TCP que passam. Um pacote SYN de uma conexão de entrada é suficiente para fazer uma suposição. O arquivo "impressão digital" do site de Zalewski é meio antigo. Mais recentes arquivos de impressões digitais existem.