1. 程式人生 > >線上流量分析

線上流量分析

安裝 hexdump

pip3 install hexdump

正文

Telnet是典型的互動式流量,要分析Telnet流量,需要把整個TCP流中的所有資料包進行拼接,最後對拼接後的資料進行Decode分析!

Telent_Monitor.py 程式碼

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *

import re
import hexdump

def qythexdump(src,length = 16):#每16個位元組被提取出來,進行16進位制的decode
    for i in range(0,len(src),length):#range(start, stop[, step])
        s = src[i:i+length]
        hex_result = hexdump.hexdump(s)

qyt_string = b''

def telnet_monitor_callback(pkt):
    global qyt_string
    try:
        qyt_string = qyt_string + pkt.getlayer(Raw).fields['load']#提取Telnet中的資料,並且把他們拼在一起
    except Exception as e:#非ascii時候可能decode失敗
        pass

PTKS = sniff(prn=telnet_monitor_callback, store = 1, timeout = 10, iface = "乙太網")#iface為上網的網口名稱,根據自己實際情況修改
wrpcap("telnet.cap",PTKS)
qythexdump(qyt_string)#顯示輸出


# filter = "tcp port 23 and ip host 202.100.1.2"

解釋

以上程式碼是獲取當前網口乙太網 網路資訊10s資料報資訊,並且儲存在“telnet.cap” 檔案中
同時把可以解碼的進行解碼列印在終端顯示

顯示列印結果和wireshark形式差不多,ASCII碼和decode之後的文字

下面貼張wireshark 探取的網路流量對比看下

當然,可以在sniff中新增filter,以過濾更加符合心意的資料報。例如,在sniff 中加入filter = "ip host 172.17.168.71" ,可以只看到該ip相關的資料

總結

scapy中filter 格式遵循的是tcpdump 過濾的格式:

1) 如果僅僅是想過濾出IP層的特定IP的資料,需要使用ip host X.X.X.X或ip src X.X.X.X或ip dst X.X.X.X
2) 如果僅僅是想過濾出ARP或RARP協議的IP資料包時,需要使用arp host X.X.X.X 或 rarp host X.X.X.X
3) 更多幫助:man pcap-filter

參考

https://www.youtube.com/watch?v=tKzlfiCIwjI

https://blog.csdn.net/wuzhimang/article/details/54178598