This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cuiyiming-gradproj/Experiment/ExpertFeature/tls_cert_length.ipynb
2019-12-23 01:20:51 +08:00

543 lines
29 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"zhihu 3488\n",
"weibo 2705\n",
"douyin 2072\n",
"hupu 1217\n",
"toutiao 1058\n",
"Name: 4, dtype: int64"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"date = '2019-12-20_21'\n",
"root_dir = '/Users/Leo/Documents/github/GradProj/'\n",
"example_label_file = root_dir + 'DataSet/result/' + date + '/stream_tag.txt'\n",
"example_label_df = pd.read_table(example_label_file, sep='\\s+', header=None)\n",
"example_label_df[3] = 443\n",
"example_label_df[4].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"import numpy as np\n",
"import json"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ciper_suits = {\n",
" '1305':0,\n",
" 'C030':1,\n",
"\t'C02C':2,\n",
"\t'C028':3,\n",
"\t'C024':4,\n",
"\t'C014':5,\n",
"\t'C00A':6,\n",
"\t'00A5':7,\n",
"\t'00A3':8,\n",
"\t'00A1':9,\n",
"\t'009F':10,\n",
"\t'006B':11,\n",
"\t'006A':12,\n",
"\t'0069':13,\n",
"\t'0068':14,\n",
"\t'0039':15,\n",
"\t'0038':16,\n",
"\t'0037':17,\n",
"\t'0036':18,\n",
"\t'0088':19,\n",
"\t'0087':20,\n",
"\t'0086':21,\n",
"\t'0085':22,\n",
"\t'C019':23,\n",
"\t'00A7':24,\n",
"\t'006D':25,\n",
"\t'003A':26,\n",
"\t'0089':27,\n",
"\t'C032':28,\n",
"\t'C02E':29,\n",
"\t'C02A':30,\n",
"\t'C026':31,\n",
"\t'C00F':32,\n",
"\t'C005':33,\n",
"\t'009D':34,\n",
"\t'003D':35,\n",
"\t'0035':36,\n",
"\t'0084':37,\n",
"\t'008D':38,\n",
"\t'C02F':39,\n",
"\t'C02B':40,\n",
"\t'C027':41,\n",
"\t'C023':42,\n",
"\t'C013':43,\n",
"\t'C009':44,\n",
"\t'00A4':45,\n",
"\t'00A2':46,\n",
"\t'00A0':47,\n",
"\t'009E':48,\n",
"\t'0067':49,\n",
"\t'0040':50,\n",
"\t'003F':51,\n",
"\t'003E':52,\n",
"\t'0033':53,\n",
"\t'0032':54,\n",
"\t'0031':55,\n",
"\t'0030':56,\n",
"\t'009A':57,\n",
"\t'0099':58,\n",
"\t'0098':59,\n",
"\t'0097':60,\n",
"\t'0045':61,\n",
"\t'0044':62,\n",
"\t'0043':63,\n",
"\t'0042':64,\n",
"\t'C018':65,\n",
"\t'00A6':66,\n",
"\t'006C':67,\n",
"\t'0034':68,\n",
"\t'009B':69,\n",
"\t'0046':70,\n",
"\t'C031':71,\n",
"\t'C02D':72,\n",
"\t'C029':73,\n",
"\t'C025':74,\n",
"\t'C00E':75,\n",
"\t'C004':76,\n",
"\t'009C':77,\n",
"\t'003C':78,\n",
"\t'002F':79,\n",
"\t'0096':80,\n",
"\t'0041':81,\n",
"\t'008C':82,\n",
"\t'C012':83,\n",
"\t'C008':84,\n",
"\t'0016':85,\n",
"\t'0013':86,\n",
"\t'0010':87,\n",
"\t'000D':88,\n",
"\t'C017':89,\n",
"\t'001B':90,\n",
"\t'C00D':91,\n",
"\t'C003':92,\n",
"\t'000A':93,\n",
"\t'0007':94,\n",
"\t'008B':95,\n",
"\t'0021':96,\n",
"\t'001F':97,\n",
"\t'0025':98,\n",
"\t'0023':99,\n",
"\t'C011':100,\n",
"\t'C007':101,\n",
"\t'C016':102,\n",
"\t'0018':103,\n",
"\t'C00C':104,\n",
"\t'C002':105,\n",
"\t'0005':106,\n",
"\t'0004':107,\n",
"\t'008A':108,\n",
"\t'0020':109,\n",
"\t'0024':110,\n",
"\t'C010':111,\n",
"\t'C006':112,\n",
"\t'C015':113,\n",
"\t'C00B':114,\n",
"\t'C001':115,\n",
"\t'003B':116,\n",
"\t'0002':117,\n",
"\t'0001':118,\n",
" '1301':119,\n",
"\t'1302':120,\n",
"\t'1303':121,\n",
"\t'1304':122\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"extensions = { \n",
" 0:0, \n",
" 1:1, \n",
" 2:2, \n",
" 3:3, \n",
" 4:4, \n",
" 5:5, \n",
" 6:6, \n",
" 7:7, \n",
" 8:8, \n",
" 9:9, \n",
" 10:10, \n",
" 11:11, \n",
" 12:12, \n",
" 13:13, \n",
" 14:14, \n",
" 15:15, \n",
" 16:16, \n",
" 17:17, \n",
" 18:18, \n",
" 19:19, \n",
" 20:20, \n",
" 21:21, \n",
" 22:22, \n",
" 23:23, \n",
" 24:24, \n",
" 25:25, \n",
" 26:26, \n",
" 27:27, \n",
" 28:28, \n",
" 29:29, \n",
" 30:30, \n",
" 31:31, \n",
" 35:32, \n",
" 65281:33 \n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"#TODO: 加入cipher suitesextensions特征\n",
"stream_stat_json_file = root_dir + 'DataSet/result/' + date + '/stream_stat.txt'\n",
"stm2cipherDict = dict()\n",
"stm2extenDict = dict()\n",
"with open(stream_stat_json_file) as f:\n",
" lines = f.readlines()\n",
" for line in lines:\n",
" line = json.loads(line)\n",
" flow_key = (line['sip'], line['sport'], line['dip'], line['dport'])\n",
" cipher_suites = line['tls']['cipher_suites']\n",
" extension_list = line['tls']['extensions_list']\n",
" stm2cipherDict[flow_key] = cipher_suites\n",
" stm2extenDict[flow_key] = extension_list"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"example_label = {tuple(example_label_df.iloc[i,0:4].values):example_label_df.iloc[i,4] for i in example_label_df.index}"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"end\n"
]
},
{
"data": {
"text/plain": [
"'\\nkeys = set(example_label.keys()).difference(set(result_key))\\nexample_keys = example_label_df.iloc[:,0:4].values.copy()\\nfor i,value in enumerate(list(example_keys)):\\n #print(tuple(value))\\n if tuple(value) in keys:\\n print(i)\\n'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"example_json_file = root_dir + 'DataSet/result/' + date + '/ssl_stat.txt'\n",
"example_json_f = open(example_json_file, 'r')\n",
"#array_shape = (1771,6)\n",
"result_data = list()\n",
"result_label = list()\n",
"result_key = list()\n",
"i = 0\n",
"for line in example_json_f.readlines():\n",
" example_json = ''\n",
" try:\n",
" example_json = json.loads(line)\n",
" except Exception:\n",
" continue\n",
" #标签\n",
" try:\n",
" flow_key = (example_json['sip'], example_json['sport'], example_json['dip'], example_json['dport'])\n",
" result_label.append(example_label[flow_key])\n",
" result_key.append(flow_key)\n",
" ciphers = stm2cipherDict[flow_key]\n",
" extensions_list = stm2extenDict[flow_key]\n",
" except Exception:\n",
" continue\n",
" #print(example_json)\n",
" san_count = 0\n",
" cert_length = [0,0,0,0]\n",
" if 'san' in example_json:\n",
" san_count = len(example_json['san'].split(';'))\n",
" cert = example_json['Cert']\n",
" cert_count = cert['cert_count']\n",
" if cert_count != 0:\n",
" cert_length = [c['length'] for c in cert['cert_list']]\n",
" for i in range(4 - len(cert_length)):\n",
" cert_length.append(0)\n",
" result = [san_count, cert_count]\n",
" result += cert_length\n",
" #print(len(result))\n",
" \n",
" #tls\n",
" extensions_arr = np.zeros(34, dtype=np.uint8)\n",
" cipher_suits_arr = np.zeros(123, dtype=np.uint8)\n",
" for extension in extensions_list:\n",
" try:\n",
" extensions_arr[extensions[extension]]=1\n",
" except Exception:\n",
" pass\n",
" for cipher in ciphers:\n",
" try:\n",
" cipher = cipher.upper()\n",
" cipher_suits_arr[ciper_suits[cipher]]=1\n",
" except Exception:\n",
" pass\n",
" result += list(cipher_suits_arr)\n",
" result += list(extensions_arr)\n",
" result_data.append(result)\n",
" i += 1\n",
" \n",
"extensions_head = list()\n",
"for i in range(len(extensions)):\n",
" extensions_head.append('extension'+str(i))\n",
"cipher_head = ['cipher'+str(i) for i in range(len(ciper_suits))]\n",
"base_head = ['san_count', 'cert_count', 'cert_length1', 'cert_length2', 'cert_length3','cert_length4']\n",
"header = base_head+cipher_head+extensions_head\n",
"result_df = pd.DataFrame(result_data, columns=header)\n",
"result_df['label'] = np.array(result_label)\n",
"\n",
"print('end')\n",
"'''\n",
"keys = set(example_label.keys()).difference(set(result_key))\n",
"example_keys = example_label_df.iloc[:,0:4].values.copy()\n",
"for i,value in enumerate(list(example_keys)):\n",
" #print(tuple(value))\n",
" if tuple(value) in keys:\n",
" print(i)\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import os\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"164\n",
" precision recall f1\n",
"LogisticRegression 0.886296 0.886296 0.886296\n",
"SVM 0.897751 0.897751 0.897751\n",
"GaussianNB 0.694103 0.694103 0.694103\n",
"tree 0.911328 0.911328 0.911328\n",
"RandomForest 0.905388 0.905388 0.905388\n"
]
},
{
"data": {
"image/png": "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\ndr1wf+KJJ/jyl7/MVlttBcBXvvIVHn/8cYYPH07v3r3XtN93332pq6ur8G9uReAzdyusxqNOGrYb\nAveTTz5h2223ZebMmWu+XnjhhbKe++CDD+axxx6je/fufPOb31zzRtBgY4vkdOzYcc3jmpoaVq3y\ncqzWcg53K6xXX32Vp59+GoAbb7yRAw88cJ3jXbp0oXfv3tx6661AEsizZs0CYNiwYUycOBFILrwu\nWbJkne9duHAh22+/PaeddhqnnnoqM2bMWOf4wQcfzB133MEHH3zA8uXLuf322znooIM2y+9pxdSm\nu2XcFWGfRt++fbnmmmv4zne+Q58+fTjjjDO45JJL1mlz/fXXc8YZZ/Czn/2MlStXMnLkSPr378+E\nCRMYPXo0V111FTU1NUycOJGhQ4eu+b5HHnmEX/7yl7Rv357OnTuvd+Y+YMAATj75ZAYPHgwkF1T3\n2Wcfd8FYxbTpcLd8qNTQxZZq164dl19++bq1NArX3r17c9999633vTvssAN33nnnevuXLVsGwEkn\nncRJJ5203vHS5x83bhzjxo1b53htbS3PP//8mu3vf//7zf4eZk1xt4yZWQ453K2QGp8hm+WNw93M\nLIcc7mZmOeRwNzPLIYe7mVkOOdzNKqSuro499tgDSMa5H3300RlXZEXmce6WvXO3ab5Ni57v/RY1\njwgignbtfK5j+eF/zVZIdXV19O3blzFjxjBgwACuu+46hg4dyoABA/jqV7+65makqVOnsv/++9O/\nf38GDx7M0qVLqaur46CDDmLAgAEMGDCg2TnczbLgcLfCmjdvHieeeCIPPPAAV111FQ8++CAzZsxg\n4MCBXHTRRaxYsYIRI0YwYcIEZs2axYMPPsiWW27J9ttvzwMPPMCMGTO4+eabOeuss7L+VczW424Z\nK6xevXoxZMgQ7rnnHubOnbtm+t8VK1YwdOhQ5s2bx4477sigQYOAZCIxgOXLlzN27FhmzpxJTU0N\nL730Uma/g9mGONytsBqm9o0IDj/8cG688cZ1js+ePbvJxagvvvhidthhB2bNmsUnn3xCp06dWqVe\ns5Zwt4wV3pAhQ3jyySeZP38+AB988AEvvfQSu+++O4sWLWLq1KkALF26lFWrVvH++++z44470q5d\nO6677jpWr16dZflmTXK4W+F169aNq6++mlGjRrHXXnsxZMgQXnzxRTp06MDNN9/Md7/7Xfr378/h\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1110cfe80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC\n",
"from sklearn.naive_bayes import GaussianNB\n",
"from sklearn import tree\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.metrics import f1_score,recall_score,precision_score\n",
"import random\n",
"examples = result_df.values.copy()\n",
"print(len(examples[0]))\n",
"score_df = pd.DataFrame(np.zeros((5,3)),index = ['LogisticRegression', 'SVM', 'GaussianNB', 'tree', 'RandomForest'], \\\n",
" columns = ['precision', 'recall', 'f1'])\n",
"#def a():\n",
"f1_score_list = list()\n",
"recall_score_list = list()\n",
"precision_score_list = list()\n",
"for i in range(1):\n",
" np.random.shuffle(examples)\n",
" examples_train = examples[:int(len(examples)*0.75)]\n",
" examples_test = examples[int(len(examples)*0.75):]\n",
" x_train = examples_train[:,0:-1]\n",
" y_train = examples_train[:,-1]\n",
" x_test = examples_test[:,0:-1]\n",
" y_test = examples_test[:,-1]\n",
" classifer = LogisticRegression()\n",
" classifer.fit(x_train, y_train)\n",
" y_pred = classifer.predict(x_test)\n",
" f1_score_list.append(f1_score(y_test, y_pred, average='micro'))\n",
" recall_score_list.append(recall_score(y_test, y_pred, average='micro'))\n",
" precision_score_list.append(precision_score(y_test, y_pred, average='micro'))\n",
"scores = [np.mean(precision_score_list), np.mean(recall_score_list), np.mean(f1_score_list)]\n",
"score_df.loc['LogisticRegression'] = scores\n",
"\n",
"f1_score_list = list()\n",
"recall_score_list = list()\n",
"precision_score_list = list()\n",
"for i in range(1):\n",
" #np.random.shuffle(examples)\n",
" examples_train = examples[:int(len(examples)*0.75)]\n",
" examples_test = examples[int(len(examples)*0.75):]\n",
" x_train = examples_train[:,0:-1]\n",
" y_train = examples_train[:,-1]\n",
" x_test = examples_test[:,0:-1]\n",
" y_test = examples_test[:,-1]\n",
" classifer = SVC()\n",
" classifer.fit(x_train, y_train)\n",
" y_pred = classifer.predict(x_test)\n",
" f1_score_list.append(f1_score(y_test, y_pred, average='micro'))\n",
" recall_score_list.append(recall_score(y_test, y_pred, average='micro'))\n",
" precision_score_list.append(precision_score(y_test, y_pred, average='micro'))\n",
"scores = [np.mean(precision_score_list), np.mean(recall_score_list), np.mean(f1_score_list)]\n",
"score_df.loc['SVM'] = scores\n",
"\n",
"f1_score_list = list()\n",
"recall_score_list = list()\n",
"precision_score_list = list()\n",
"for i in range(1):\n",
" #np.random.shuffle(examples)\n",
" examples_train = examples[:int(len(examples)*0.75)]\n",
" examples_test = examples[int(len(examples)*0.75):]\n",
" x_train = examples_train[:,0:-1]\n",
" y_train = examples_train[:,-1]\n",
" x_test = examples_test[:,0:-1]\n",
" y_test = examples_test[:,-1]\n",
" classifer = GaussianNB()\n",
" classifer.fit(x_train, y_train)\n",
" y_pred = classifer.predict(x_test)\n",
" f1_score_list.append(f1_score(y_test, y_pred, average='micro'))\n",
" recall_score_list.append(recall_score(y_test, y_pred, average='micro'))\n",
" precision_score_list.append(precision_score(y_test, y_pred, average='micro'))\n",
"scores = [np.mean(precision_score_list), np.mean(recall_score_list), np.mean(f1_score_list)]\n",
"score_df.loc['GaussianNB'] = scores\n",
"\n",
"f1_score_list = list()\n",
"recall_score_list = list()\n",
"precision_score_list = list()\n",
"for i in range(1):\n",
" #np.random.shuffle(examples)\n",
" examples_train = examples[:int(len(examples)*0.75)]\n",
" examples_test = examples[int(len(examples)*0.75):]\n",
" x_train = examples_train[:,0:-1]\n",
" y_train = examples_train[:,-1]\n",
" x_test = examples_test[:,0:-1]\n",
" y_test = examples_test[:,-1]\n",
" classifer = tree.DecisionTreeClassifier()\n",
" classifer.fit(x_train, y_train)\n",
" y_pred = classifer.predict(x_test)\n",
" f1_score_list.append(f1_score(y_test, y_pred, average='micro'))\n",
" recall_score_list.append(recall_score(y_test, y_pred, average='micro'))\n",
" precision_score_list.append(precision_score(y_test, y_pred, average='micro'))\n",
"scores = [np.mean(precision_score_list), np.mean(recall_score_list), np.mean(f1_score_list)]\n",
"score_df.loc['tree'] = scores\n",
"\n",
"f1_score_list = list()\n",
"recall_score_list = list()\n",
"precision_score_list = list()\n",
"for i in range(1):\n",
" #np.random.shuffle(examples)\n",
" examples_train = examples[:int(len(examples)*0.75)]\n",
" examples_test = examples[int(len(examples)*0.75):]\n",
" x_train = examples_train[:,0:-1]\n",
" y_train = examples_train[:,-1]\n",
" x_test = examples_test[:,0:-1]\n",
" y_test = examples_test[:,-1]\n",
" classifer = RandomForestClassifier()\n",
" classifer.fit(x_train, y_train)\n",
" y_pred = classifer.predict(x_test)\n",
" f1_score_list.append(f1_score(y_test, y_pred, average='micro'))\n",
" recall_score_list.append(recall_score(y_test, y_pred, average='micro'))\n",
" precision_score_list.append(precision_score(y_test, y_pred, average='micro'))\n",
" \n",
"scores = [np.mean(precision_score_list), np.mean(recall_score_list), np.mean(f1_score_list)]\n",
"score_df.loc['RandomForest'] = scores\n",
"print(score_df)\n",
"ax = score_df.plot.bar(title='ssl-fingerprint')\n",
"fig = ax.get_figure()\n",
"#fig.savefig('../figure/ssl.svg')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}