Python-strace命令追蹤ssh操作

Python-strace命令追蹤ssh操作

通過strace 命令追蹤ssh的進程ID,記錄操作的命令[實際上是內核里面記錄的東西],進行操作日志的Py解析達到效果

追蹤進程并寫入ssh操作到文件中

Ps: 此時機器A已經ssh登錄了機器B,取得它的ssh進程PID

機器A登錄后的操作命令就記錄在了ssh.log文件中了

登陸從A登陸B機器

[root@136 ~]# ssh 192.168.0.137root@192.168.0.137's password:Last login: Sun Apr 28 13:59:08 2019 from 192.168.0.136[root@137 ~]#        

取得PID

[root@136 ~]# ps -ef | grep ssh                        root       6861      1  0 4月19 ?       00:00:00 /usr/sbin/sshd -Droot      45477   6861  0 13:57 ?        00:00:00 sshd: root@pts/2root      45478   6861  0 13:57 ?        00:00:00 sshd: root@pts/0root      45479   6861  0 13:57 ?        00:00:00 sshd: root@pts/1root      45579  45483  0 14:04 pts/1    00:00:00 ssh 192.168.0.137root      45591  45485  0 14:07 pts/2    00:00:00 grep --color=auto ssh[root@136 ~]#

strace追蹤

[root@136 ~]# strace -f -p 45579 -t -o ssh.logstrace: Process 45579 attached
[root@136 ~]#

?

遠端執行命令并退出

 1 ls
 2 
 3 df -h
 4 
 5 ifconfig
 6 
 7 ls
 8 
 9 touch aa
10 
11 echo '123' >> aa
12 
13 vim aa

本地分析

基本取得遠端執行的命令[root@136 ~]#     python audit.py['14:07:20', '\\r']['14:07:22', 'ls\\rdf -h\\r']['14:07:24', 'ifcon\\t\\r']['14:07:25', 'ls\\r']['14:07:30', 'vim\\10\\10\\10\\10touc h aa\\r']['14:07:37', "\\10echo '[1<-]123[->1] >> aa\\t\\r"]['14:07:39', 'vim aa\\t\\r']['14:07:44', '\\33[2;2R\\33[>1;10;0c[down 1]o456\\33:wq\\r'][root@136 ~]#      

腳本

  1 #_*_coding:utf-8_*_
  2 
  3 import re
  4 
  5 class AuditLogHandler(object):
  6 
  7     '''分析audit log日志'''
  8 
  9     def __init__(self, log_file):
 10 
 11         self.log_file_obj = self._get_file(log_file)
 12 
 13     def _get_file(self,log_file):
 14 
 15         return open(log_file)
 16 
 17     def parse(self):
 18 
 19         cmd_list = []
 20 
 21         cmd_str = ''
 22 
 23         catch_write5_flag = False #for tab complication
 24 
 25         for line in self.log_file_obj:
 26 
 27             #print(line.split())
 28 
 29             line = line.split()
 30 
 31             try:
 32 
 33                 pid,time_clock,io_call,char = line[0:4]
 34 
 35                 if io_call.startswith('read(4'):
 36 
 37                     if char == '"\\177",':#回退
 38 
 39                         char = '[1<-del]'
 40 
 41                     if char == '"\\33OB",': #vim中下箭頭
 42 
 43                         char = '[down 1]'
 44 
 45                     if char == '"\\33OA",': #vim中下箭頭
 46 
 47                         char = '[up 1]'
 48 
 49                     if char == '"\\33OC",': #vim中右移
 50 
 51                         char = '[->1]'
 52 
 53                     if char == '"\\33OD",': #vim中左移
 54 
 55                         char = '[1<-]'
 56 
 57                     if char == '"\33[2;2R",': #進入vim模式
 58 
 59                         continue
 60 
 61                     if char == '"\\33[>1;95;0c",':  # 進入vim模式
 62 
 63                         char = '[----enter vim mode-----]'
 64 
 65  
 66 
 67  
 68 
 69                     if char == '"\\33[A",': #命令行向上箭頭
 70 
 71                         char = '[up 1]'
 72 
 73                         catch_write5_flag = True #取到向上按鍵拿到的歷史命令
 74 
 75                     if char == '"\\33[B",':  # 命令行向上箭頭
 76 
 77                         char = '[down 1]'
 78 
 79                         catch_write5_flag = True  # 取到向下按鍵拿到的歷史命令
 80 
 81                     if char == '"\\33[C",':  # 命令行向右移動1位
 82 
 83                         char = '[->1]'
 84 
 85                     if char == '"\\33[D",':  # 命令行向左移動1位
 86 
 87                         char = '[1<-]'
 88 
 89  
 90 
 91                     cmd_str += char.strip('"",')
 92 
 93                     if char == '"\\t",':
 94 
 95                         catch_write5_flag = True
 96 
 97                         continue
 98 
 99                     if char == '"\\r",':
100 
101                         cmd_list.append([time_clock,cmd_str])
102 
103                         cmd_str = ''  # 重置
104 
105                     if char == '"':#space
106 
107                         cmd_str += ' '
108 
109  
110 
111                 if catch_write5_flag:  # to catch tab completion
112 
113                     if io_call.startswith('write(5'):
114 
115                         if io_call == '"\7",':  # 空鍵,不是空格,是回退不了就是這個鍵
116 
117                             pass
118 
119                         else:
120 
121                             cmd_str += char.strip('"",')
122 
123                         catch_write5_flag = False
124 
125             except ValueError as e:
126 
127                 print("\033[031;1mSession log record err,please contact your IT admin,\033[0m",e)
128 
129  
130 
131     #    print(cmd_list)
132 
133         for cmd in cmd_list:
134 
135             print(cmd)
136 
137         # return cmd_list
138 
139  
140 
141 if __name__ == "__main__":
142 
143     parser = AuditLogHandler('ssh.log')
144 
145     parser.parse()

轉載于:https://www.cnblogs.com/wangxu01/articles/10783712.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java h2 derby_嵌入式H2數據庫的Spring配置以進行測試

小編典典由于我不知道是否有任何工具可以檢查數據庫&#xff0c;我認為一個簡單的解決方案是使用支持HSQL&#xff0c;H2和Derby 的Spring嵌入式數據庫(3.1.x docs&#xff0c;current docs)。 。使用H2&#xff0c;你的xml配置如下所示&#xff1a;如果你更喜歡基于Java的配置…

基礎的python程序_Python程序入門

Python語法元素入門Python語法元素分析注釋注釋&#xff1a;程序員在代碼中加入的說明信息&#xff0c;不被計算機執行注釋的兩種方法&#xff1a;單行注釋以#開頭多行注釋以開頭和結尾# Here are the commentsThis is a multiline commerntused in Python縮進1個縮進 &#xf…

解決阿里云服務器磁盤報警

一般磁盤報警涉及到實際磁盤和inode文件索引節點 1.df -h檢查磁盤占用不高 2.df -i檢查inode文件索引節點有一個掛載目錄達到89%,里面有一個目錄產生大量的4k大的緩存文件,刪除該目錄下的文件解決: 刪除該目錄下小于4kb的文件 find /data/tmp -type f -size -4 -exec rm -rf {}…

leetcode310. 最小高度樹(bfs)

對于一個具有樹特征的無向圖&#xff0c;我們可選擇任何一個節點作為根。圖因此可以成為樹&#xff0c;在所有可能的樹中&#xff0c;具有最小高度的樹被稱為最小高度樹。給出這樣的一個圖&#xff0c;寫出一個函數找到所有的最小高度樹并返回他們的根節點。格式該圖包含 n 個節…

如何構建自己的免費無服務器評論框

by Shaun Persad通過Shaun Persad 如何構建自己的免費無服務器評論框 (How you can build your own free, serverless comment box) Contentful’s flexible content modeling goes far beyond blog posts. Here’s how you can leverage Contentful and Netlify to create a …

[Swift]LeetCode1035.不相交的線 | Uncrossed Lines

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?微信公眾號&#xff1a;山青詠芝&#xff08;shanqingyongzhi&#xff09;?博客園地址&#xff1a;山青詠芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;?GitHub地址&a…

BZOJ1054(搜索)

大力搜&#xff0c;狀態用一個16位的數字表示。 1 #include <bits/stdc.h>2 3 using namespace std;4 5 #define rep(i,a,b) for(int i(a); i < (b); i)6 7 const int A 30 1;8 9 struct node{int x, y; } op[A]; 10 struct Nod…

php sql語句過濾,php如何做sql過濾

php如何做sql過濾SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序&#xff0c;而這些輸入大都是SQL語法里的一些組合&#xff0c;通過執行SQL語句進而執行攻擊者所要的操作&#xff0c;其主要原因是程序沒有細致地過濾用戶輸入的數據&#xff0c;致使非法數據侵入…

ajaxfileupload 返回值_ajaxFileUpload上傳文件返回json無法解析

最近做一個文件上傳的功能&#xff0c;還要綁定數據傳輸到后臺&#xff0c;為了不影響前端的體驗&#xff0c;采用ajax發送請求。找了一些資料&#xff0c;網上的用ajaxupload這個插件。但是無論成功還是失敗都是執行的error的回調函數。后臺我采用springmvc返回的json&#xf…

leetcode133. 克隆圖(bfs)

給你無向 連通 圖中一個節點的引用&#xff0c;請你返回該圖的 深拷貝&#xff08;克隆&#xff09;。 圖中的每個節點都包含它的值 val&#xff08;int&#xff09; 和其鄰居的列表&#xff08;list[Node]&#xff09;。 class Node { public int val; public List neighbor…

OSCON上最受歡迎的Docker演講

本文講的是OSCON上最受歡迎的Docker演講&#xff0c;【編者的話】本文介紹了上個月OSCON大會有關Docker最受歡迎的一個分享&#xff1a;真實線上環境的Docker技巧。分享者是一名運維工程師叫Bridget&#xff0c;她所在的公司DramaFever在2013年10月開始在線上環境部署使用Docke…

測試驅動開發 測試前移_測試驅動開發:它是什么,什么不是。

測試驅動開發 測試前移by Andrea Koutifaris由Andrea Koutifaris Test driven development has become popular over the last few years. Many programmers have tried this technique, failed, and concluded that TDD is not worth the effort it requires.在過去的幾年中&…

【C/C++開發】C++庫大全

C特殊限定符(1)--static 當static來修飾類數據成員時&#xff0c;這個類的所有對象都可以訪問它。因為值在內存中持續存在&#xff0c;它可以被對象有效共享。這意味著當一個對象改變static數據成員的值時&#xff0c;就改變了所有對象的這個數據成員的值。 定義一個類: class …

java二維數組水平翻轉,C 語言 利用二維數組實現對輸入的數組進行翻轉

C 語言 利用二維數組實現對輸入的數組進行翻轉(幫助理解對圖像翻轉編輯原理)/*?輸入幾行幾列數字和翻轉方式&#xff0c;如&#xff1a;3 4 0即代表3行4列&#xff0c;左右翻轉&#xff1b;6 5 1即代表6行5列&#xff0c;上下翻轉。輸入示例&#xff1a;3 4 0________________…

lightgbm 保存模型 過大_一個例子讀懂LightGBM的模型文件

機器學習模型的可解釋性是個讓人頭痛的問題。在使用LightGBM模型的肯定對生成的GBDT的結構是好奇的&#xff0c;我也好奇&#xff0c;所以就解析一個LightGBM的模型文件看看&#xff0c;通過這個解析&#xff0c;你可以看懂GBDT的結構。另外&#xff0c;了解模型文件&#xff0…

Oracle Sql 胡亂記

/Oracle查詢優化改寫/ --1、coalesce 返回多個值中&#xff0c;第一個不為空的值 select coalesce(, , s) from dual; --2、order by -----dbms_random.value 生產隨機數,利用隨機數對查詢結果進行隨機排序 select * from emp order by dbms_random.value; --指定查詢結果中的一…

leetcode752. 打開轉盤鎖(bfs)

你有一個帶有四個圓形撥輪的轉盤鎖。每個撥輪都有10個數字&#xff1a; ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每個撥輪可以自由旋轉&#xff1a;例如把 ‘9’ 變為 ‘0’&#xff0c;‘0’ 變為 ‘9’ 。每次旋轉都只能旋轉一個撥輪的一位…

Object Pools 噴泉效果實現

摘錄自&#xff1a;http://catlikecoding.com/unity/tutorials/object-pools/ 工程 效果圖 工程里面有響應的注釋 源碼我就不單獨放出來了

從頭學習計算機網絡_我如何通過從頭開始構建網絡爬蟲來自動進行求職

從頭學習計算機網絡它是如何開始的故事 (The story of how it began) It was midnight on a Friday, my friends were out having a good time, and yet I was nailed to my computer screen typing away.星期五是午夜&#xff0c;我的朋友們出去玩得很開心&#xff0c;但我被釘…

php 動態生成文件,php動態程序生成靜態文件示例

html>{title}{content}tmp.html是模板文件/** 說明&#xff1a;生成靜態頁面,tmp.html是模板文件&#xff0c;news.html是要生成的文件&#xff0c;**///1&#xff0c;先讀取模板中內容$strfile_get_contents(tmp.html);//2&#xff0c;將指定的內容進行替換$title網站標題;…