python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性。

字符串具有列表的特性

>>> a="hello world"
>>> a[:-1]
‘hello worl‘

转义符

转义字符
\(在行尾时)    续行符    

\\    反斜杠符号
\‘    单引号
\"    双引号
\a    响铃
\b    退格(Backspace)
\e    转义
\000    空
\n    换行
\v    纵向制表符
\t    横向制表符
\r    回车
\f    换页
\oyy    八进制数yy代表的字符,例如:\o12代表换行
\xyy    十进制数yy代表的字符,例如:\x0a代表换行
\other    其它的字符以普通格式输出

代码部分

            if sys.stdin in r:
                x = sys.stdin.read(1)
                if x == ‘\b‘:
                   cmd=cmd[:-1]
                else:
                    cmd+=x
                #records.append(x)
                if x == ‘\r‘:
                    #print "your input is:",cmd
                    log_line = "-login_user:%s\t|host_addr:%s\t|%s|HISTORY_CMD: %s \n" % (username,hostname,time.strftime("%Y_%m_%d %H:%M:%S"),cmd)
                    cmd = ‘‘
                    log_file.write(log_line)

操作演示 123456789 删除3 6 9键入三个键  如下标红

[email protected]:~/baolei# sh remote.sh
########################################################
1:      [haproxy]       w1.dev.haproxy.org  192.168.0.105
########################################################

 before choose items will be sleep a monent

Please choose ip of top:1
Please input your username:root
root 192.168.0.105
192.168.0.105 root
username:root
*** WARNING: Unknown host key!
Auth by (p)assword, (r)sa key, or (d)ss key? [p]
Password for [email protected]192.168.0.105:
*** Here we go!

Last login: Thu Feb 25 15:44:25 2016 from 192.168.0.106
/data/x/tools/team/env/alias.env
fatal: Not a git repository (or any of the parent directories): .git
/data/x/tools/team/env/git-completion.env
ansible-direc:~ #  124578
-bash: 124578: command not found
ansible-direc:~ #  exit
logout

*** EOF
[email protected]:~/baolei# vim /tmp/root/192.168.0.105_audit_log_2016_02_27.log
[email protected]:~/baolei# vim /tmp/root/192.168.0.105_audit_log_2016_02_27.log
[email protected]:~/baolei# vim /tmp/liujianzuo/192.168.0.102_audit_log_2016_02_27.log
[email protected]:~/baolei# vim interactive.py
[email protected]:~/baolei# tail /tmp/root/192.168.0.105_audit_log_2016_02_27.log
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:24:51|HISTORY_CMD: ls
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:24:53|HISTORY_CMD: exit
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:40:27|HISTORY_CMD: ls
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:40:29|HISTORY_CMD: lll
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:40:38|HISTORY_CMD: sd
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:40:44|HISTORY_CMD: exit
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:57:16|HISTORY_CMD: 9
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 13:57:19|HISTORY_CMD: exit
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 14:02:53|HISTORY_CMD: 124578
 login_user:root        |host_addr:192.168.0.105        |2016_02_27 14:02:54|HISTORY_CMD: exit

 shell 变量传入python脚本,修改后的源码脚本就不粘贴了。

[email protected]:~/baolei# cat remote.sh
#!/bin/sh
#created by liujianzuo
list(){
        #cd /home/liujianzuo/server/scripts
        echo  "\033[33;1m########################################################\033[0m"
        awk ‘{printf "\033[35;1m%s:\t[%-4s]\t%20s\t%s\033[0m\n",NR,$2,$1,$NF}‘ remote_ip.log
        echo  "\033[33;1m########################################################\033[0m\n"
}
wai_t(){
        echo  "\033[32;1m before choose items will be sleep a monent\033[0m\n"
       # for i in {1..3};do sleep 0.6 && echo -e "\033[35;1m..........................\033[0m";done
        #read -p "Please choose ip of top:" num
        while true
        do
                if [ -z $num ] && [ -z $username ];then
                        read -p "Please choose ip of top:" num
                        read -p "Please input your username:" username
                        continue
                else
                        break
                fi
        done
        IP=`awk -v ip=$num ‘NR == ip{printf "%s:\t[%10s]\t%-20s\t%s\n",NR,$2,$1,$NF}‘ remote_ip.log|awk ‘{print $NF}‘`
}
list
wai_t
python=`which python`
echo $username $IP
python demo.py $IP $username

还有几个bug要修改:

  终端内切换ip,审计日志的ip要相应变化。

  登陆服务器密码失败一次不退出。

时间: 2025-01-01 13:49:23

python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改的相关文章

Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就提出了一种把通过FILE*来访问内存的需求,下文是针对这个需求的几个方面的尝试及其结论. 以下尝试的前提是:Win7 + VS2010. 在vc中,FILE其实就是_iobuf,定义如下: struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前

Python:SQLMap源码精读—start函数

源代码 1 def start(): 2 """ 3 This function calls a function that performs checks on both URL 4 stability and all GET, POST, Cookie and User-Agent parameters to 5 check if they are dynamic and SQL injection affected 6 """ 7 if n

Python:SQLMap源码精读之基于时间的盲注(time-based blind)

基于时间的盲注(time-based blind) 测试应用是否存在SQL注入漏洞时,经常发现某一潜在的漏洞难以确认.这可能源于多种原因,但主要是因为Web应用未显示任何错误,因而无法检索任何数据. 对于这种情况,要想识别漏洞,向数据库注入时间延迟并检查服务器响应是否也已经延迟会很有帮助.时间延迟是一种很强大的技术,Web服务器虽然可以隐藏错误或数据,但必须等待数据库返回结果,因此可用它来确认是否存在SQL注入.该技术尤其适合盲注. 源码解释 代码位置:在checkSqlInjection函数中

Python:SQLMap源码精读之基于错误的盲注(error-based blind)

目标网址 http://127.0.0.1/shentou/sqli-labs-master/Less-5/?id=1 Payload的生成 1 <test> 2 <title>MySQL >= 5.0 AND error-based - WHERE or HAVING clause</title> 3 <stype>2</stype> 4 <level>1</level> 5 <risk>0</r

Python:Sqlmap源码精读之解析xml

XML <?xml version="1.0" encoding="UTF-8"?> <root> <!-- MySQL --> <dbms value="MySQL"> <cast query="CAST(%s AS CHAR)"/> <length query="LENGTH(%s)"/> <isnull query=&quo

【Python】python链表应用源码示例

python链表应用源码示例,需要用到python os模块方法.函数和类的应用. 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. python链表应用源码示例如下: #-*-coding:utf8 -*- import os class Head_List: def __init__(self , id): self.id = id self.next = -1 self.length = 0 def s

基于海思Hi3716cv200的Android源码编译及烧写之内置存储卡

问题:把编译好的镜像烧写到小板上后,发现设置--->存储 里只显示0.98G的系统空间,而且在设置--->应用 点开后会崩溃.崩溃时的日志信息如下: time( 3407): at com.android.settings.applications.ManageApplications$TabInfo.updateStorageUsage(ManageApplications.java:333) E/AndroidRuntime( 3407): at com.android.settings.

基于海思Hi3716cv200的Android源码编译及烧写

1.先说说硬件配置,我最开始是在Win7(I7 4770,8G RAM,2T硬盘)里装ubuntu10.10 64位系统(4G RAM,200G 硬盘)进行源码编译,大概花了3个多小时.而且还多次出现outofmemoryerror 错误.最后将硬件升级为I7 4770.16G内存.2T硬盘,不装虚拟机,直接跑Ubuntu 10.10系统,Swap分区为16G,编译一次大概花了40分钟,没有报任何错误. 所以不推荐在虚拟机里面跑. 2.根据官方文档配置编译环境: 官方文档说的是在"发布包/Sof

Python 进阶之源码分析:如何将一个类方法变为多个方法?

前一篇文章<Python 中如何实现参数化测试?>中,我提到了在 Python 中实现参数化测试的几个库,并留下一个问题: 它们是如何做到把一个方法变成多个方法,并且将每个方法与相应的参数绑定起来的呢? 我们再提炼一下,原问题等于是:在一个类中,如何使用装饰器把一个类方法变成多个类方法(或者产生类似的效果)? # 带有一个方法的测试类 class TestClass: def test_func(self): pass # 使用装饰器,生成多个类方法 class TestClass: def