ssldump0.9b3版本的源码分析
一、目錄結構
| Base | 提供一些數據收集和調試打印的功能 |
| Common | 提供一些鏈表、字符串結構、位域、調試、錯誤打印、時間戳、線程操作等功能 |
| Dummy | 無 |
| Null | 提供了分析數據的功能,跟ssl目錄中的analyze部分很像,還不明白具體的用處 |
| Ssl | 對tcp連接的往返數據進行順序解析https的過程 |
| Win32 | window平臺編譯使用 |
二、內容介紹
? ?對Dummy、Null、Win32部分不介紹,只介紹以下部分:
? ?2.1 Base部分
| common.c文件 | 主要有一個xdump函數,打印十六進制數值 |
| Debug.c文件 | 主要有一個debug函數,打印到stderr |
| Network.c文件 | 函數如下: network_handler_create()里調用了mod->vtbl->create_ctx() network_handler_destroy()釋放handler network_process_packet()中有一個process_tcp_packet()函數來處理tcp的包數據 packet_copy()獲取tcp頭后面的真實數據 packet_destroy()釋放packet結構的包 timestamp_diff()計算時間間隔 lookuphostname()通過gethostbyaddr()來轉換hostname |
| Pcap-snoop.c文件 | 函數如下: pcap_cb()調用network_process_packet()來處理包數據 main()函數先處理ssldump后的選項,然后調用pcap相關api來獲取數據,然后調用network_handler_create(),最后調用pcap_loop處不斷循環(huán)調用pcap_cb來處理數據 |
| print_utils.c文件 | 包含explain()和exdump()兩個函數 |
| Proto_mod.c文件 | 函數如下: create_proto_handler()調用了mod->vtbl->create() destroy_proto_handler()調用了(*handlerp)->vtbl->destroy() |
| tcpconn.c文件 | 函數如下: tcp_find_conn()根據saddr、sport、daddr、dport查找到conn對象 tcp_create_conn()被new_connection()調用來創(chuàng)建conn對象并插入list中 tcp_destroy_conn()從list中刪掉釋放一些資源 free_tcp_segment_queue() copy_tcp_segment_queue()調用packet_copy拷貝包 |
| tcppack.c文件 | 函數如下: process_tcp_packet()處理tcp的包,函數中會調用 ? ? ? ? ? process_data_segment()來處理segment數據 new_connection()調用tcp_create_conn()創(chuàng)建tcp_conn對象,調用create_proto_handler()創(chuàng)建proto_mod對象 process_data_segment()調用packet_copy()來拷貝數據,然后調用conn->analyzer->vtbl->data()來分析數據 print_tcp_packet()調用lookuphostname()來轉換ip,打印tcp的流程包,如ACK,FIN,SYN,RST,PUSH,URG等 |
? ?2.2 Common部分
| debug.c文件 | 包含debug()和xdump()函數 |
| r_assoc.c文件 | 函數如下: r_assoc_create() r_assoc_destroy()調用了destroy_assoc_chain() destroy_assoc_chain()釋放資源 copy_assoc_chain() r_assoc_fetch_bucket() r_assoc_fetch() r_assoc_insert() r_assoc_copy() r_assoc_init_iter() r_assoc_iter() r_assoc_iter_delete() hash_compute() |
| r_assoc_test.c文件 | 測試r_assoc.c文件中的api |
| r_bitfield.c文件 | 函數如下: r_bitfield_create() r_bitfield_destroy() r_bitfield_set() r_bitfield_isset() |
| r_data.c文件 | 函數如下: r_data_create() r_data_alloc() r_data_make() r_data_destroy() r_data_copy() r_data_zfree() r_data_compare() |
| r_errors.c文件 | 函數如下: verr_exit() |
| r_list.c文件 | 函數如下: r_list_create() r_list_destroy() r_list_copy() r_list_insert() r_list_append() r_list_init_iter() r_list_iter() |
| r_replace.c文件 | strdup() |
| r_time.c文件 | 函數如下: gettimeofday() r_timeval_diff() r_timeval_add() r_timeval2int() r_gettimeint() |
| pthread.c文件 | 線程相關 |
? ?2.3 Ssl部分
| ciphersuites.c文件 | 包含一個CipherSuites結構體和一個ssl_find_cipher()函數 |
| main.c | 略 |
| ssl.enums.c | ContentType_decoder結構體包含四個函數: ? ? ?decode_ContentType_ChangeCipherSpec() ? ? ?decode_ContentType_Alert() ? ? ?decode_ContentType_Handshake() ? ? ?decode_ContentType_application_data() HandshakeType_decoder結構體包含以下函數: ? ? ?decode_HandshakeType_HelloRequest() ? ? ?decode_HandshakeType_ClientHello() ? ? ?decode_HandshakeType_ServerHello() ? ? ?decode_HandshakeType_Certificate() ? ? ?decode_HandshakeType_ServerKeyExchange() ? ? ?decode_HandshakeType_CertificateRequest() ? ? ?decode_HandshakeType_ServerHelloDone() ? ? ?decode_HandshakeType_CertificateVerify() ? ? ?decode_HandshakeType_ClientKeyExchange() ? ? ?decode_HandshakeType_Finished() AlertLevel_decoder結構體包含以下函數: ? ? ?decode_AlertLevel_warning() ? ? ?decode_AlertLevel_fatal() AlertDescription_decoder結構體包含以下函數: ? ? ?decode_AlertDescription_close_notify() ? ? ?decode_AlertDescription_unexpected_message() ? ? ?decode_AlertDescription_bad_record_mac() ? ? ?decode_AlertDescription_decryption_failed() ? ? ?decode_AlertDescription_record_overflow() ? ? ?decode_AlertDescription_decompression_failure() ? ? ?decode_AlertDescription_handshake_failure() ? ? ?decode_AlertDescription_bad_certificate() ? ? ?decode_AlertDescription_unsupported_certificate() ? ? ?decode_AlertDescription_certificate_revoked() ? ? ?decode_AlertDescription_certificate_expired() ? ? ?decode_AlertDescription_certificate_unknown() ? ? ?decode_AlertDescription_certificate_unknown() ? ? ?decode_AlertDescription_certificate_unknown() ? ? ?decode_AlertDescription_access_denied() ? ? ?decode_AlertDescription_decode_error() ? ? ?decode_AlertDescription_decrypt_error() ? ? ?decode_AlertDescription_export_restriction() ? ? ?decode_AlertDescription_protocol_version() ? ? ?decode_AlertDescription_insufficient_security() ? ? ?decode_AlertDescription_internal_error() ? ? ?decode_AlertDescription_user_canceled() ? ? ?decode_AlertDescription_no_renegotiation() client_certificate_type_decoder結構體包含以下函數: ? ? ?decode_client_certificate_type_rsa_sign() ? ? ?decode_client_certificate_type_dss_sign() ? ? ?decode_client_certificate_type_rsa_fixed_dh() ? ? ?decode_client_certificate_type_dss_fixed_dh() |
| ssldecode.c | 函數如下: ? ? password_cb() ? ? ssl_decode_ctx_create() ? ? ssl_decoder_create() ? ??ssl_set_client_random() ? ??ssl_set_server_random() ? ??ssl_process_server_session_id() ? ??ssl_process_change_cipher_spec() ? ??ssl_decode_record() ? ??ssl_create_session_lookup_key() ? ??ssl_restore_session() ? ? ssl_save_session() ? ??ssl_process_client_key_exchange() ? ??tls_P_hash() ? ??tls_prf() ? ??ssl3_generate_export_iv() ? ??ssl3_prf() ? ??ssl_generate_keying_material() ? ?? |
| sslprint.c文件 | 函數如下: ? ? ?process_beginning_plaintext() ? ? ?process_v2_hello() ? ? ?ssl_decode_switch() ? ? ?ssl_expand_record() ? ? ?ssl_decode_uintX() ? ? ?ssl_decode_opaque_array() ? ? ?ssl_lookup_enum() ? ? ?ssl_decode_enum() ? ? ?ssl_print_enum() ? ? ?explain() ? ? ?exdump() ? ? ?combodump() ? ? ?print_data() ? ? ?ssl_print_direction_indicator() ? ? ?ssl_print_timestamp() ? ? ?ssl_print_record_num() ? ? ?ssl_print_cipher_suite() |
| sslxprint.c | 函數如下: ? ? ?sslx_print_certificate() ? ? ?sslx_print_dn() ? ? ?sslx__print_dn() ? ? ?sslx__print_serial() |
| ssl_analyze.c | 函數如下: ? ? ?parse_ssl_flag() ? ? ?parse_ssl_flags() ? ? ?create_ssl_ctx() ? ? ?create_ssl_analyzer() ? ? ?destroy_ssl_analyzer() ? ? ?free_r_queue() ? ? ?create_r_queue() ? ? ?read_ssl_record() ? ? ?read_data() ? ? ?data_ssl_analyzer() ? ? ?print_ssl_header() ? ? ?print_ssl_record() ? ? ?close_ssl_analyzer() 主要的結構體: static struct proto_mod_vtbl_ ssl_vtbl ={ struct proto_mod_ ssl_mod = { |
| ssl_enum.c | ContentType_decoder結構體包含的函數: ? ? ?decode_ContentType_change_cipher_spec() ? ? ?decode_ContentType_alert() ? ? ?decode_ContentType_handshake() ? ? ?decode_ContentType_application_data() HandshakeType_decoder結構體包含的函數: ? ? ?decode_HandshakeType_hello_request() ? ? ?decode_HandshakeType_client_hello() ? ? ?decode_HandshakeType_server_hello() ? ? ?decode_HandshakeType_certificate() ? ? ?decode_HandshakeType_server_key_exchange() ? ? ?decode_HandshakeType_certificate_request() ? ? ?decode_HandshakeType_server_hello_done() ? ? ?decode_HandshakeType_certificate_verify() ? ? ?decode_HandshakeType_client_key_exchange() ? ? ?decode_HandshakeType_finished() ? |
| ssl_rec.c | 函數如下: ? ? ?ssl_create_rec_decoder() ? ? ?ssl_destroy_rec_decoder() ? ? ?ssl_decode_rec_data() ? ? ?fmt_seq() ? ? ?tls_check_mac() ? ? ?ssl3_check_mac() |
??
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ssldump0.9b3版本的源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssldump编译及使用过程
- 下一篇: tcpdump源码分析——抓包原理