Package: fastFET
BGP特征提取工具组织结构1. 项目路径fastFET  
    ├── BGPMAGNET/      BGP原始数据下载工具(by倪泽栋)  
    ├── bgpToolKit.py   BGP异常检测中常用的辅助函数
    ├── collectData.py  主模块：数据收集，包括下载、解析 
    ├── drawing.py      特征提取后的数据作图  
    ├── event_list.csv　要采集的事件列表  
    ├── featGraph.py    图特征采集功能集合   
    ├── featTradition.py传统特征采集功能集合  
    ├── featTree.py     特征树，集成所有特征及其pl.Expr  
    ├── FET.py          主模块：特征采集  
    ├── logConfig.json  日志配置  
    ├── MultiProcess.py 多进程工具   
    ├── README.md 
    ├── RIPEStatAPI.py  `https://stat.ripe.net/data/*`常用接口集合 
    └── utils.py        工具集合2. cwd 默认路径cwd  
├── Dataset  
│   ├── features/               特征提取最终数据  
│   │　　└── date_event_monitor.csv  
│   ├── MOAS/                   提取过程中属于multi-origin-AS的消息  
│   ├── raw_cmpres              原始数据下载存放路径    
│   │   ├── rrc00/    
│   │   └── routeviews./    
│   └── raw_parsed              原始数据解析存放路径    
│       └── 事件名  
│           └── 采集器名/  
└── log                         日志路径    
    ├── errors.log  
    └── info.log使用方法- 提取特征创建特征提取工具对象fet, 添加目标事件信息, 指定特征集合, 开始提取特征：fromfastFETimportFETev=FET.EventEditor()event1="RU_AS_hijack_twitter,2022/03/28 11:05:00, 2022/03/28 12:06:00, rrc22"ev.addEvents([event1,])fet=FET.FET(raw_dir='Dataset/',increment=4)fet.setCustomFeats(["volume"])feat_path=fet.run()addEvents方法添加此次要采集特征的事件信息列表。格式：事件名；起始时间；结束时间（可缺省）；采集器（可多个，用,相隔）。fet= FET.FET()，特征采集器实例。fet.setCustomFeats([...])，自定义所采集特征类型。3种方法：全量采集；按类别采集；按单个特征采集 (详见该方法注释)。feats= fet.getAllFeats()，查看该工具现已集成的特征列表。fet.run()，运行主函数。参数only_rib= True时，实例仅用于对rib表图特征采集。返回特征存放路径。- 特征分析作图分析特征时序变化：fromfastFET.drawingimportsimple_plotfromglobimportglobev_name=event1.split(',')[0]p=glob(f"{feat_path}*{ev_name}*")[0]simple_plot(p,front_k=5,subplots=False)- 其他工具# 获取IP经纬度和地址fromfastFET.bgpToolKitimportCommonTooldic=CommonTool.ip2coord(['8.8.8.8'])# 收集RIPE-NCC和RouteViews项目中的peersfromfastFET.bgpToolKitimportPeersDatadic_peer=PeersData.get_peers_info()dic_rrc=PeersData.get_rrc_info()# 画图：快速查看各采集点消息量的宏观走势fromfastFET.bgpToolKitimportMRTfileHandlerMRTfileHandler.draw_collectors_file_size(time_start='20211004.1200',time_end='20221004.1200')# 从所有采集点的rib表获取全局 prefix和peer_AS的共现矩阵fromfastFET.bgpToolKitimportCOmatrixPfxAndPeerCOmatrixPfxAndPeer.get_pfx2peer_COmatrix_parall()rank=COmatrixPfxAndPeer.peers_rank_from_COmat()# 计算全球peerAS的视野排名# 从一个rib表中选出最佳的peers列表fromfastFET.bgpToolKitimportPeerSelectorlis=PeerSelector.select_peer_from_a_rib(f"{rib_path}")# 特征提取前的数据清洗fromfastFET.bgpToolKitimportUpdsMsgPreHandlerdf_new=UpdsMsgPreHandler.run_cut_peak()# 作图：直接针对updates消息的分析工具fromfastFET.bgpToolKitimportRawMrtDataAnalyrda=RawMrtDataAnaly()更多工具实现详见：./bgpToolKit.py,./RIPEStatAPI.py特征字段说明共139字段，含序列号，日期，136个特征，及标签。类别字段解释-time_bin时间序列号-date日期volumev_total消息总数-v_A宣告消息总数-v_W撤销消息总数-v_IGP属于IGP的消息总数-v_EGP属于EGP的消息总数-v_ICMP属于IMCOMPLETE的消息总数-v_peer不同peer的数量-v_pfx_t_cnt不同prefix的数量-v_pfx_t_avg不同prefix出现过的平均次数-v_pfx_t_max不同prefix出现过的最大次数-v_pfx_A_cnt属宣告的不同prefix的数量-v_pfx_A_avg属宣告的不同prefix出现过的平均次数-v_pfx_A_max属宣告的不同prefix出现过的最大次数-v_pfx_W_cnt属撤销的不同prefix的数量-v_pfx_W_avg属撤销的不同prefix出现过的平均次数-v_pfx_W_max属撤销的不同prefix出现过的最大次数-v_pp_t_cnt不同peer-prefix对的数量-v_pp_t_avg不同peer-prefix对出现过的平均次数-v_pp_t_max不同peer-prefix对出现过的最大次数-v_pp_A_cnt属宣告的不同peer-prefix对的数量-v_pp_A_avg属宣告的不同peer-prefix对出现过的平均次数-v_pp_A_max属宣告的不同peer-prefix对出现过的最大次数-v_pp_W_cnt属撤销的不同peer-prefix对的数量-v_pp_W_avg属撤销的不同peer-prefix对出现过的平均次数-v_pp_W_max属撤销的不同peer-prefix对出现过的最大次数-v_oriAS_t_cnt源AS的数量-v_oriAS_t_avg源AS的平均出现次数-v_oriAS_t_max源AS的最大出现次数-v_oriAS_peer_cnt不同peer-originAS对的数量-v_oriAS_peer_avg不同peer-originAS对出现过的平均次数-v_oriAS_peer_max不同peer-originAS对出现过的最大次数-v_oriAS_pfx_cnt不同prefix-originAS对的数量-v_oriAS_pfx_avg不同prefix-originAS对出现过的平均次数-v_oriAS_pfx_max不同prefix-originAS对出现过的最大次数-v_oriAS_pp_cnt不同peer-prefix-originAS对的数量-v_oriAS_pp_avg不同peer-prefix-originAS对出现过的平均次数.-v_oriAS_pp_max不同peer-prefix-originAS对出现过的最大次数.pathpath_len_max最大路径长度-path_len_avg平均路径长度-path_unq_len_max去重后的最大路径长度-path_unq_len_avg去重后的平均路径长度ASAs_total_cnt出现过的AS的数量-As_total_avg不同AS出现过的平均次数-As_total_max不同AS出现过的最大次数-AS_rare_avg所有消息的路径中含有稀有AS的总共数量-AS_rare_sum一条消息的路径中含有稀有AS的最大数量dynamicis_WA属于撤销后宣告的消息数-is_AW属于宣告后撤销的消息数-is_WAW属于撤销-宣告-撤销的消息数-is_longer_path路径变长的消息数-is_shorter_path路径变短的消息数-is_longer_unq_path去重后路径变长的消息数-is_shorter_unq_path去重后路径变短的消息数-is_new属于全新宣告的消息数-is_dup_ann属于重复宣告的消息数（仅prefix重复）-is_AWnA属于宣告-撤销多次-宣告的消息数-is_imp_wd属于隐式撤销的消息数（重复宣告，但其他属性变化）-is_WnA属于撤销多次-宣告的消息数-is_AWn属于宣告-多次撤销的消息数-is_AnW属于多次宣告-撤销的消息数-is_WAn属于撤销-多次宣告的消息数-is_dup_wd属于重复撤销的消息数-is_dup属于重复宣告的消息数（完全重复）-is_flap属于宣告-撤销-宣告，且属性完全不变的消息数-is_NADA属于宣告-撤销-宣告，但属性有变化的消息数-is_imp_wd_spath属于路径属性不变的隐式撤销的消息数-is_imp_wd_dpath属于路径属性变化的隐式撤销的消息数-type_0针对同一prefix，源AS改变了的消息数(MOAS)-type_1针对同一prefix，path中第2个AS改变了的消息数-type_2针对同一prefix，path中第3个AS改变了的消息数-type_3针对同一prefix，path中第4个AS改变了的消息数-ED_max同一peer-prefix下，最大的编辑距离值的消息数-ED_avg同一peer-prefix下，平均的编辑距离值的消息数-ED_0同一peer-prefix下，编辑距离为0的消息数-ED_1 ~ ED_10同一peer-prefix下，编辑距离为1~10的消息数ratioratio_firstOrder最活跃的宣告前缀/宣告总数（即v_pfx_A_max / v_A）-ratio_ann宣告量占更新消息总量之比（即v_A / v_total）-ratio_wd撤销量占更新消息总量之比（即v_W / v_total）-ratio_origin0IGP占宣告量之比（即v_IGP / v_A）-ratio_origin1EGP占宣告量之比（即v_EGP / v_A）-ratio_origin2IMCOMPLETE占宣告量之比（即v_ICMP / v_A）-ratio_dup_ann完全重复宣告占宣告量之比（即is_dup_ann / v_A）-ratio_flap属性完全不变的宣-撤-宣占宣告量之比（即is_flap / v_A）-ratio_NADA属性有变化的宣-撤-宣占宣告量之比（即is_NADA / v_A）-ratio_imp_wd隐式撤销占宣告量之比（即is_imp_wd / v_A）-ratio_imp_wd2隐式撤销占隐式撤销+撤销之比（即is_imp_wd / (is_imp_wd+ v_W)）-ratio_exp_wd真正撤销占隐式撤销+撤销之比（即v_W / (is_imp_wd+ v_W)）-ratio_imp_wd_dpath路径属性不同的隐式撤销占隐式撤销之比（即is_imp_wd_dpath / is_imp_wd）-ratio_imp_wd_spath路径属性相同的隐式撤销占隐式撤销之比（即is_imp_wd_spath / is_imp_wd）-ratio_new全新宣告占宣告量之比（即is_new / v_A）-ratio_wd_dups重复撤销占撤销量之比（即is_dup_wd / v_W）-ratio_longer_path更长路径宣告占宣告量之比（即is_longer_path / v_A）-ratio_shorter_path更短路径宣告占宣告量之比（即is_shorter_path / v_A）-ratio_longer_path2更长路径宣告占更长/短宣告量之比（即is_longer_path / (is_longer_path+ is_shorter_path)）-ratio_shorter_path2更短路径宣告占更长/短宣告量之比（即is_shorter_path / (is_longer_path+ is_shorter_path)）node_level_graphnd_degree_centrality节点平均度中心性-nd_node_clique_number节点平均最大集团数-nd_number_of_cliques节点平均集团数-nd_closeness_centrality节点平均紧密中心性-nd_betweenness_centrality节点平均中介中心性-nd_local_efficiency节点平均局部效率-nd_harmonic_centrality节点平均谐波中心度-nd_eigenvector_centrality节点平均特征向量中心度-nd_pagerank节点平均重要度排名-nd_clustering节点平均聚类中心性-nd_triangles节点平均三角形数量-nd_eccentricity节点平均偏心率-nd_average_shortest_pth_length节点平均最短路径长度-nd_load_centrality节点平均负载中心性-nd_degree节点平均度数-nd_square_clustering节点平均平方聚类系数-nd_average_neighbor_degree节点平均邻居度数AS_level_graphgp_nb_of_nodes总节点数-gp_nb_of_edges总边数-gp_diameter最大偏心率-gp_assortativity同配性-gp_largest_eigenvalue最大特征值-gp_algebraic_connectivity代数连通度-gp_effective_graph_resistance有效图阻抗-gp_symmetry_ratio对称率-gp_natural_connectivity自然连通度-gp_node_connectivity节点连通度-gp_edge_connectivity边连通度-gp_weighted_spectrum_3三方加权频谱-gp_weighted_spectrum_4四方加权频谱-gp_percolation_limit渗透极限-gp_nb_spanning_trees生成树数量-label异常类型标签特征补充下述特征留待实现字段说明ConcentratRatio前三个最活跃的宣告前缀/宣告总数（即vol_ann_pfx_max / v_A）其他BGP原始数据处理中注意事项BGP RAW DATA: 采集时间间隔不统一，如rrc00中20030723.0745之前为15min（且时刻不固定），之后为5min（时刻固定）。MRT文件解析后，path 字段可能存在{}形式，如下:58057 6939 4635 4788 38044 2373658057 6939 4635 4788 38044 {23736}58057 6939 1299 2603 2603 2603 6509 {271,7860,8111,53904}stat.ripe.net的API获取的路由，path字段可能存在[]形式。Route-Views中的MRT文件名格式不严谨，经常出现无规律的时间戳。数据分析中观测到的一些现象劫持震荡：当is_MOAS很大，而vol_oriAS_peer_pfx或vol_oriAS_pfx很小时，说明存在一个prefix反复被多个AS宣告的情况。outage类型难溯源