说明:
1、脚本功能:在window电脑端实时打印linux系统上抓取得数据包
2、嵌入式linux系统抓包步骤:首先系统要支持tcpdump命令,若不支持需要交叉编译对应得tcpdump版本,然后ssh登陆linux系统搭建tcpdump环境,再输入相关得命令进行抓包。由于我得系统不支持tcpdump,每次需要登陆linux系统搭建tcpdump环境再使用相应命令抓包。为了每次抓包方便(只需感谢阅读一下即可完成以上操作)输出如下脚本
3、实现方式:
a、使用paramiko库连接登录linux系统
b、将tcpdump文件挂载至嵌入式linux系统(其它方式也可,只有有方法放入待测设备即可)
c、/mnt/tcpdump -nnvvveXX 过滤项(实时打印或保存至本地)
代码:
import paramikoimport time,reimport requestsimport jsondef getinfo(ip,keyword): user = "admin" password = "test1234" ssh = paramiko.SSHClient() know_host = paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(know_host) try: ssh.connect(hostname = "%s"%ip,port = 22,username = "%s"%user,password = "%s"%password, timeout=10) print ("IP:%s连接成功.."%ip) timestamp = time.strftime('%Y.%m.%d_%H:%M:%S',time.localtime()) print ("杀掉缓存进程") stdin,stdout,stderr = ssh.exec_command("pkill -9 tcpdump") print ("挂载") stdin,stdout,stderr = ssh.exec_command("mount -t nfs -o nolock,tcp 192.168.1.8:/share/test/tcpdump /mnt/") result = stdout.read().decode(errors='ignore').strip() print (result) time.sleep(2) print ("抓包") # tcpdump -nnvvveXX port 8090 指定端口抓包并打印屏幕上 # tcpdump -nnvvveXX host 120.55.157.69 # tcpdump -nnvvveXX tcp print ("----------------------------print pacp------------------------------") invoke = ssh.invoke_shell() invoke.send("/mnt/tcpdump -nnvvveXX %s \n"%keyword) while True: try: recv = invoke.recv(2048).decode() if recv: print ("================>") print(recv) else: continue except: command = input(">>>") + "\n" invoke.send("ls -l") ssh.close() except Exception as e: print ('设备%s连接异常:'%ip,e) err_info = "ip连接失败"if __name__ == '__main__': # 过滤选项:host 192.168.51.95 && port 5060 && tcp keyword = "port 22" ip = '192.168.0.18' getinfo(ip,keyword)
执行:
测试结果:
感谢阅读本文