2016年5月26日

MSF启动时的视觉效果

在玩metasploit,执行msfconsole在启动过程中,发现它的等待字符串很有爱。虽然是字符界面,不过也能做到一些视觉效果,于是去找了下源码。这部分的源码是(#号部分是我自己理解后的注释):
#!/usr/bin/env ruby
base_line = "[*] Starting the Metasploit Framework console..."
cycle = 0
loop do
%q{/-\|}.each_char do |c|
  status = "#{base_line}#{c}\r"
  cycle += 1
  off = cycle % base_line.length #格式化base_line,让off可以从0到48,再加上loop,这个0到48就可以一直循环
  case status[off, 1] #检测base_line这串字符串,如果是小写就变大写,如果是大写就变回小写
    when /[a-z]/
      status[off, 1] = status[off, 1].upcase
    when /[A-Z]/
      status[off, 1] = status[off, 1].downcase
  end
  $stderr.print status
  ::IO.select(nil, nil, nil, 0.10)
end
end
下面就是实现的效果!

2014年11月12日

sed

一直都是断断续续的学习Sed和Awk,现在想正式了解其中的原理。现在先来学习Sed。

1 sed 's/abc/def/5,10' file 和 sed -i '5,10s/abc/def/g' file的区别

sed 's/abc/def/5,10' file 将第5行到第10行的abc改成def
sed '5,10s/abc/def/g' file 将一行的第5字段到第10字段的abc改为def

2 sed a 命令( append )
sed "1 a test abc" file 在第一行下面插入test abc 一行
sed "$ a test abc" file 在最后一行插入test abc一行
sed "/my/a test" file 在匹配my一行的下一行插入test一行

3 sed i 命令( insert )
与sed a命令相反,它是在前面插入一行
sed "1i test abc" file 在第一行上面插入新行
sed "/my/i test abc" file 在匹配my的一行上面插入一行

4 sed c 命令( replace )
sed "2 c test" file 将第二行全部内容替换为test
sed "/abc/c test" file 将有abc的一行替换为test

5 sed d 命令( delete )
sed "2d" file 将第二行删除
sed "/test/d" file 将匹配test的一行删除
sed "2,5d" file 将第2行到第5行删除

6 更有趣的是,sed有一个命令打包的东西,挺有意思的。
它们可以用分号分开,可以用大括号括起来作为嵌套命令
sed "3,6{/test/d}" file 将3到6中含有test字符的行删除
sed "3,6{/test/{/field/d}}" file 将3到6行中含有test和field的行删除
sed "1,${/test/d; s/^ $//g}" file 将整个文件中含有test的行删除和将空行删除
在这里将多个命令使用大括号或分号来分开和执行了

7 保留空间
保留空间
g: 将保留空间中的内容拷贝到匹配空间中,原来匹配空间里的内容清除
G: 将保留空间中的内容追加到匹配空间后面
h: 将匹配空间中的内容拷贝到保留空间中,原来的保留空间里的内容被清除
H: 将匹配空间中的内容追加到保留空间后面
x: 交换匹配空间和保留空间的内容

sed '1!G;h;$!d' file 倒序一个文件内容
1!G —— 只有第一行不执行G命令,将hold space中的内容append回到pattern space
h —— 第一行都执行h命令,将pattern space中的内容拷贝到hold space中
$!d —— 除了最后一行不执行d命令,其它行都执行d命令,删除当前行

来自 http://coolshell.cn/articles/9104.html
 
 



2014年5月13日

命令标准输入

一个目录里的内容
IN[~]>>>ls -l 
total 56732 -rw-rw-r-- 1 minix 1236 Apr 29 09:19 
3g_total.sh -rwxr-xr-x 1 minix 50963038 Mar 26 08:36 
ap.log* -rw-r--r-- 1 minix 7031684 Nov 27 11:51 
VNC-Server-5.0.6-Linux-x86.deb -rwxrwxr-x 1 minix 543 Jan 1 23:36 
aa.sh* drwxr-xr-x 4 minix 4096 Feb 28 20:34 
aaa/ -rw-rw-r-- 1 minix 685 Dec 18 14:36 
check_status.sh -rw-rw-r-- 1 minix 246 Apr 25 16:31 
db.rb -rwxr-xr-x 1 minix 636 Oct 21 2013 
execltocvs.rb* -rw-rw-r-- 1 minix 731 Apr 23 10:00 
gr.rb -rw-rw-r-- 1 minix 61 Apr 30 10:12 
ip.txt drwxr-xr-x 3 minix 4096 Mar 5 22:23 
kibana/ -rwxrwxr-x 1 minix 1150 May 4 14:51 
log.rb* drwxrwxr-x 16 nagios 4096 Mar 15 2013 
nagios/ drwxrwxr-x 4 minix 4096 Mar 5 20:35 
nagios_dir/ drwxrwxr-x 3 minix 4096 Aug 7 2013 
operation/ -rw-rw-r-- 1 minix 0 Apr 30 10:12 
ping.log -rw-rw-r-- 1 minix 124 Apr 30 10:13 
ping.rb -rw-rw-r-- 1 minix 175 Sep 2 2013 
red.rb drwxr-xr-x 3 minix 4096 Sep 13 2013 
setup123/ drwxrwxr-x 2 minix 4096 Sep 3 2013 
sock/ -rw-rw-r-- 1 minix 1061 Aug 15 2013 
t.sh -rw-rw-r-- 1 minix 182 Apr 21 18:29 
te.rb -rw-rw-r-- 1 minix 259 Jul 18 2013 
test.rb -rw-rw-r-- 1 minix 319 Apr 17 10:09 
ton.py drwxrwxr-x 7 minix 4096 Apr 17 09:48 tornado-3.2.0/

使用echo将输入的内容写入文件 
IN[~]>>>echo `\ls` > aa.txt 
IN[~]>>>cat aa.txt 
3g_total.sh ap.log aaa aa.sh aa.txt check_status.sh db.rb execltocvs.rb gr.rb ip.txt kibana log.rb nagios nagios_dir operation ping.log ping.rb red.rb setup123 sock te.rb test.rb ton.py tornado-3.2.0 t.sh VNC-Server-5.0.6-Linux-x86.deb 
IN[~]>>>

下面完整输出命令的标准输出(这才是我要的效果)  
IN[~]>>>cat << EOF > aa.txt 
`\ls` 
EOF 
IN[~]>>>cat aa.txt 
3g_total.sh 
ap.log 
aaa 
aa.sh 
aa.txt 
check_status.sh 
db.rb 
execltocvs.rb 
gr.rb 
ip.txt 
kibana 
log.rb 
nagios 
nagios_dir 
operation 
ping.log 
ping.rb 
red.rb 
setup123 
sock te.rb 
test.rb 
ton.py 
tornado-3.2.0 t.sh 
VNC-Server-5.0.6-Linux-x86.deb 
IN[~]>>>

2014年3月25日

ruby正则

下面一行被我用正则匹配出来了,我还真佩服自己的耐心!
2014-03-05T03:49:43+08:00 autelanmaster eag1_0[1421]: eag_radius.c:1002:RadiusAcctRequestUpdate___UserName:73570,UserIP:20.3.141.241,Sessiontime:7200,SSID:shanlink,authtype:Portal,ApMAC:00-1F-64-EB-7C-CC,UserMAC:F8-A4-5F-C8-E9-B3,NasID:1
用ruby写的代码如下(其实我的编码水平就是个菜头):
  1 #!/usr/bin/env ruby
  2 #
  3 str = '2014-03-05T03:49:43+08:00 autelanmaster eag1_0[1421]: eag_radius.c:1002:RadiusAcctRequestUpdate___UserName:73570,UserIP:20.3.141.241,Sessiontime:7200,SSID:shanlink,authtype:Portal,ApMAC:00-1F-64-EB-7C-CC,UserMAC:F8-A4-5F-C8-E9-B3,NasID:1'
  4 value = str.match /(^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}) (\w+)\s(\w+\d_\d\[\d{4}\]:)\s(\w+_\w+\.\w:\d+:\w+__\w+:\d+\,\w+:)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\,\w+:\d+,\w+:)(shanlink)(,\w+:\w+,\w+:)([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-    F]{2}-[0-9A-F]{2})(\,\w+:)([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2})(\,\w+:\d)$/
  5 puts value[1, 5, 9, 12]

我要得到的结果是value的 [1,5,9,11] .这段代码还不是正确的。不过要拿出来已经很容易了。
应该有更好的办法的,只是我现在不知道而已!

2014年3月16日

osx10.6.8无法安装homebrew

IN[/data/software]>>>ruby homebrew.rb
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press ENTER to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir /usr/local
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> Downloading and Installing Homebrew...
dyld: Library not loaded: /usr/lib/libcurl.4.dylib
  Referenced from: /usr/libexec/git-core/git-remote-https
  Reason: Incompatible library version: git-remote-https requires version 7.0.0 or later, but libcurl.4.dylib provides version 6.0.0
Failed during: git fetch origin master:refs/remotes/origin/master -n

安装了 Snow Leopard 10.6.7后, 要使用brew来安装一些软件。我的办法就是将homebrew.rb文件下载下来,然后运行。不过运行过程出现上面的错误信息。
出现这个错误信息是因为curl的版本太低,无法运行git来下载。我的办法就是在网上下载一个最新的curl下来,然后自己编译安装(一开始是没有编译器的,要安装XCODE才可以). 记得要使用--prefix将它指定到一个地方,这样方便查找。编译完成后执行下面的命令:

mv /usr/lib/libcurl.4.dylib /usr/lib/libcurl.4.dylib.old   #将其改名字
ln -s /curl/install/diretcory/lib/libcurl.4.dylib /usr/lib/ #将编译好的curl下的lib/libcurl.4.dylib目录软链接到/usr/lib目录下


再一次运行 ruby homebrew.rb 就成功了!

git证书

昨天在安装ruby2.0的时候无法安装,再想下因为之前装了xcode3.2.1和xcode4,觉得是编译的版本问题,然后在/Developer/Library下运行那两个uninstall脚本将全部都删除。
然后再使用brew的时候就出现了下面的错误情况:
minixs-MacBook-Pro% brew update
Initialized empty Git repository in /usr/local/.git/
fatal: unable to access 'https://github.com/Homebrew/homebrew.git/': SSL certificate problem: unable to get local issuer certificate
Error: Failure while executing: git fetch origin

一开始觉得是git使用了curl来拉github.com上面的东西,因为没证书导致出现,因为curl可以使用参数--cacert来指定证书文件,所以拼命在找/usr/local/Library/Homebrew/目录下的所有文件,看下里面有没curl,有的话就加上这个参数。哪知道都没有!
搞了一会后再想下,因为github.com是使用https来传输,那git也有可以是缺少证书才不能连,然后根据这个线索上google搜索
"git SSL certificate problem: unable to get local issuer certificate"
然后得到了一个正确的结果:
git config --system http.sslcainfo /usr/share/ssl/cacert.pem
这样的意思是加上sslcainfo的信息,而/usr/share/ssl/cacert.pem文件是网上下载的。运行上面一行后再运行
brew update
就成功了!唉!