-
2005-12-23
Emacs学习笔记
初识EmacsEmacs是什么?
E. M. A. C. S.
emacs Makes A Computer Slow
Escape Meta Alt Control Shift
emacs Makers Are Crazy Sickos
emacs Makes All Computing Simple
emacs Makefiles Annihilate C-Shells
emacs Manuals Always Cause Senility
emacs May Allow Customized Screwups
emacs Manuals Are Cryptic and Surreal
Eventually Munches All Computer Storage
Eight Megabytes And Constantly Swapping
Elsewhere Maybe All Commands are Simple
Excellent Manuals Are Clearly Suppressed
emacs May Alienate Clients and Supporters
Except by Middle Aged Computer Scientists
Extended Macros Are Considered Superfluous
Every Mode Accelerates Creation of Software
Each Manual's Audience is Completely Stupefied
Exceptionally Mediocre Algorithm for Computer Scientists
Easily Maintained with the Assistance of Chemical Solutions
Eradication of Memory Accomplished with Complete Simplicity
Emacs是UNIX/Linux系统上又一个强大的工具.他可以作为文本编辑器来用,但是仅仅是一个文本编辑又不能体现出他的强大.他还可以用来编辑源程序,然后进行编译,可以说他又是一个强大的IDE环境.然而令人惊奇还不仅仅是这些,我们还可以用他来收发电子邮件,上网浏览....总之一句,Emacs强大的得令人惊讶.
记得有人说过这样的一句话:世界上在三种人,一种是用Vi,另一种是用Emacs,剩下的是第三种人.由此我们可以看到Emacs和Vi的强大.但是这样的两个优秀的程序却是各有特点,同样的令人喜爱.我们可以根据我们的人个喜好来选择我们的喜欢的,但是不要说出Emacs不如Vi或是Vi不如Emacs的话来.因为他们是同样的优秀,同样的强大,同样的令人喜爱,我们还是来享受我们喜爱的东东吧.何必做这些无谓的口舌之争呢?
记得还有人说过一句似乎听来是很无奈的一句:Emacs是很优秀,但是UNIX系统还有一些其他的优秀软件,由此我们也可以看出人们对态Emacs的态度.有人说Emacs本身就是一个操作系统,我们可以在这里完成我们所有的工作.而Emacs的开发目的就是:如果我们离开Emacs,那么就是我们应离开电脑的时候了.由此我们更可以体会到Emacs的强大之处.关于Emacs的强大之处的说法还有许多,我们可以自己去搜索一下咯:)
下面就叫我们来认识一个Emacs吧:
现在的Linux发行版本中一般来说都是带有Emacs的,如果没有我们可以到这里进行下载来自己编译安装:http://www.emacs.org.而另有一个XEmacs的版本,可以说是Emacs的改进吧.是一个图形界的Emacs(但是这里没有懂咯,在我看来Emacs和XEmacs都是图形界面的呃>).
如果我们的系统中安装有Emacs,我们可以在终端输入命令来启动:
$emacs
$emacs filename
$xemacs
$xemacs filename
通过这样的命令我们可以看到Emacs或是XEmacs了.
在Emacs的顶部是菜单栏,我们可以在选择各种各样的功能来完成我们的工作.在菜单栏的下面是工具栏,在这里给我们提供了各种各样的实现功能,如文件的打开各保存等等.
而在工具栏下面的就是我们的编辑区,也就是我们称之为缓冲区的地方.在这里我们可以进行我们的各种各样的编辑操作.但是这时我们要知道的就是缓冲区中的内容并没有真正的写入磁盘文件,我们要在完成我们的编辑工作后进行保存.
在缓冲区下面的就是我们称之为模式行(mode-line)的地方,在这里可以显示文件名及其状态.如果在文件名前显示--则说明这个文件没有变动,如果是**则说明这个文件已经做了改动,我们在退出时要记得保存.%%则表明这个文件是不可以进行编辑的,也就是说这个文件是有写保护的.%*表明这个文件是写保护的,但是我们还是可以进编辑的.
再下面的就是所谓的小缓冲区(mini-buffer)的地方,这时也可以显示出一些我们在文件编辑过程中的信息,另外就是我们可以在这里输入我们的命令来控制Emacs的工作.
谈到Emacs,另外一点不得不说就是Emacs的命令中常有一些C,M的字符.在Emacs中C是指Ctrl,而M是指Alt,如果Alt不工作,我们可以按下ESC来替换试一试.在Emacs中命令是一个按键的组合,例如我们退出Emacs的命令为C-x C-c,这就是说我们要按下Ctrl-x,然后再按下Ctrl-c来退出Emacs.
最后我们来介绍一些常用的Emacs的有用的站点:
Emacs老家:http://www.emacs.org
XEmacs:http://www.xemacs.org
Emacs的一些有用的配置:http://zhdotemacs.sourceforge.org
Emacs如此的强大,那么就叫我们快一些开始我们的Emacs之旅吧~~:)这里我们将会学会如何插入和删除文本,在Emacs中进行移动,剪切和粘贴,装入和保存文件.我们还会谈到一些在我们要读入一个新文件时要用到的有用的函数功能.
插入和删除文本:
在Emacs中插入和删除文本就如我们在打印机上输入文本一样的简单,我们只是简单的输入我们要输入的文本.这样的输入方式是和我们在Vim中所见到的输入方式是不一样的,因为在Vim我们要插入模式下输入文本,而在Emacs中不是这样的.
在Emacs中我们可以有几种不同的方式来删除文本.最简单的方法就是按下Backspace键或者是Delete键.在大多数的Emacs安装中Backspace会删除前一个字符而Delete会删除后一个字符.如果这样的方法不能删除字符,我们可以使用C-d(delete-char)来删除字符.
输入时自动断行:
当我们在Emacs中输入文本直到一行的结束时,Emacs并不会为我们断开这一行,相反他会表明会在下一行继续并且在下一行中我们可以继续来输入.在这个标记继续的符号会出现在一个文本的最后一列.而我们可以通过下面的方式来使得Emacs可以自动断行.我们按下M-x然后输入aotu-fill-mode
在Emacs中进行移动:
在Emacs中我们可以有几种方式来进行移动.我们可以用小方向键来在Emacs中进行移动,我们也可以通过page-up,page-down来在页间进行跳转.
如果我们的小方键不可以进行了工作了,我们还可以用下面的方法来进行移动:
向前一个字符:C-f (forward-char)
向后一个字符:C-b (backward-char)
向上一行:C-p (previous-line)
向下一行:C-n (next-line)
向前滚动一页:C-v (scroll-up)
向后滚动一页:M-v (scroll-down)
在缓冲区的末尾新加一个空行:
当我们已经到了缓冲区的最后一行时我们希望Emacs如何来做呢?这里两个可能的方法:一是加入一个行并移动这一行;二是响铃提示这样是不可以的.我们可以根据我们的个人爱好来选择一个解决方法:
如果我们要选择加入一个新行,我们可以将下面的一行加入我们的.emacs文件中:
(setq next-line-add-newlines t)
如果我们要选择响铃,我们可以将下面的一行加入我们的配置文件中:
(seq next-line-add-newlines nil)
Emacs为我们提供了许多的方法我们可以其中进行移动.我们并不需要马上知道所有的这些方法,重要的我们要知道他们存在.当我们需要他时我们可以用到.
我们可以用C-a (beginning-of-line)移动到一行的开头,用C-e (end-of-line)来移到一行的结尾.这些并不是太容易记住,但是当我们熟练了就不会觉得难了.
我们还可以以单词为单位向前或是向后移动.这要比按字符的方式移动要快得多,我们可以很容易的记住这些按键:Ctrl+右键(forward-word)向右移动,Ctrl+左键(backward-word)向左移动.
我们还可以用下面的一些按键进行移动:
向前一句:M-e (forward-sentence)
向后一句:M-a (backward-sentence)
向前一段:M-} (forward-paragraph)
向后一段:M-{ (backward-paragraph)
向前一页:C-x ] (forward-page)
向后一页:C-x [ (backward-page)
要了解更多的这样的功能以及句,段或是页结束的描述,我们可以输入C-h f (describe-function)然后输入功能名.
我们还要两个功能可以回到匹配的括号处,这个分别叫做forward-sexp,backward-sexp.这在编程的时候显得更为有用.我们可以将他们绑定到Meta-左键和Meta-右键.为了做到这一点我们可以将下面的两句加入我们的.emacs文件中:
(global-set-key [(meta left)] 'backward-sexp)
(global-set-key [(meta right)] 'forward-sexp)
有时我们可以通过指定的数字回到指定的行.这个可以使用goto-line命令,在XEmacs中我们可以通过M-g来做到,而在Emacs中我们也想要这样的做就要将下面的一句加入到我们的.emacs文件中:
(global-set-key [(meta g)] 'goto-line)
如果我们的窗口比较的乱或者是我们要将光标入在窗口的中央,我们可以按下C-l (recenter).这样就会重绘我们的窗口并将光标放在窗口的中部而不改变他在缓冲区中的位置.
剪切,复制,粘贴:
为标记我们要剪切或是复制的区域,我们可以使用鼠标或是键盘.
通过下面的例子我们可以学会如何使用用鼠标标记区域并将这个区域复制到剪粘板(在Emacs中称为kill-ring):
1将鼠标放在我们要标记的文本的开头
2按下鼠标左键同时拉动鼠标直到我们要复制的文本的结尾
3松开鼠标
4如果我们要将这些文本复制到剪刀粘板,也就是说并不从缓冲区中删除,选择编辑菜单并选择复制.如果我们要将这些剪切到剪切板中,也就是从缓冲区中删除,可以到编辑菜单中选择剪切.
当然如果我们在Emacs中操作,Linux中的复制方式也是同样适用的.
下面的例子可以使我们学会如何标记并复制区域文本:
1 将光标放在我们要选择的文本的开头.
2 按下Ctrl+Spacebar,在缓冲下部就会显示出文本标记
3 到我们要选择的文本的结尾处.
4
如果我们要复制到剪切板,我们可以按下M-w(kill-ring-save),如果我们要剪切,我们可以按下C-w(kill-region)
而我们最经常的做法却是使用鼠标来标记文本区域然后使用键盘来来进行剪切或是复制的操作.虽然在一开始看来这些键盘绑定比较难于记忆,但是我们还要是试着来这样做,因为这样的方法会使得我们和Emacs的交互更加的方便和快速.
我们可以使用鼠标或是键盘来进行文本的粘贴.如果要使用鼠标我们只是简单的在我们要粘贴文本的地方按下鼠标中键.要使用键盘,我们要将光标放在我们要粘贴文本的地方然后按下C-y
Emacs不仅会保存最后一次的选择而且会保存以前的一些文本的选择.这就使得我们将一些旧的选择放入我们的缓冲区中.要粘贴一个旧的文本选择,我们可以按下C-y,这就会将最一次的文本选择粘贴到缓冲区中.然后我们按下M-y(yank-pop),这就会用将倒数第二次的文本选择插入我们的缓冲区中.接下来的M-y可以用更旧的文本选择来替换.
如果我们在C-y和M-y之间按下其他的键,我们就不可能得到一些更旧的文本选择了.
如果我们正在使用GNU
,位于选择和粘贴之后.然而在XEmacs中却是不可以的.
除了命令C-w(kill-region),还有其他的一些命令可以删除缓冲区中的文本并将其放在剪切板中.最常用一个命令就是C-k(kill-line),他会将从当前光标处直到本行结束的文本移除并放入剪切板中.我们可以多次按下这个键,这样就可以移除多行文本并将其加入剪切板中.这样如果我们粘贴文本,所有的行就会做为一个整体进行操作.
我们在以前还谈到C-d命令可以删除下一个字符.这样另两个比较有用的命令就是M-d(kill-word)删除后一个单词,而M-DEL可以删除前一个单词(backward-kill-word).这两个命令都可以将删除的文本放入剪切板中.
另一个比较简单的插入方法就是插入一个文件夹.我们可以通过C-x i来做到.
编辑文件:
在Emacs中编辑一个文件最简单的方法就是我们在启动Emacs时用我们要编辑的文件名作为参数.当我们的Emacs正在运行时,我们可以通过C-x C-f来装入一个文件.
Emacs会将当前缓冲区的路径作为我们的开始路径.这个原因就是在大部的时间里我们要打开的文件与我们的当前编辑的文件处在同一个文件夹中.如果我们要查找的文件位于另一个文件夹中,我们可以编辑这个给定的路径.
双斜线(//)表明Emacs会忽略到当前点的内容并将剩余行的内容理解为从文件系统的根目录开始的路径.与其相同的/~/表明会忽略到当前点的内容并将此行剩余的内容理解为我们当前主目录下的目录路径.有时我们要打开一个位于其他文件夹中的文件,这样的方式就显得更为有用了.
如果我们所指定的文件并不在我们的硬盘上,Emacs就会将其理解为我们要编辑的新文件的名字.所以新建一个文件与打开一个并不存在的文件是相同的.当我们打开了一个并不存在的文件,Emacs会通过在minibuffer显示信息来提示我们这是一个新的文件.
下面也许是我们会打开一个并不存在的文件的原因:
1 我们要编辑一个新的文件.
2 我们输入了错误的文件名,也就是我们实际要编辑的是另一个文件.
在后一种情况下,我们要通过命令C-x k(kill-buffer)来杀掉为新文件所打开的缓冲区,然后再打开我们要编辑的文件.一个更好的办法就是我们可以按下C-x C-v (find-alternate-file),这个方法会同时完成上面的两步操作.
在这里我们要注意的就是在Emacs装入或是打开一个文件被称为finding a file.这是由于历史的原因.所以装入文件的命令是find-file而不是load-file.
要保存缓冲区,我们可以简单的使用C-x C-s (save-buffer).这样Emacs就会将当前缓冲区中的内容保存到我们原始装入的文件中.如果当前的缓冲区并没有与一个装入的文件相匹配,也就是说如果我们要将我们的启动Emacs时看到的初始缓冲区的内容写入一个文件,Emacs就会询问文件名.
也许有的时候我们会需要读入一个文件而希望将其以另一个文件名进行保存,这时C-x
就不能满足我们的要求了,因为这个命令会将我们的缓冲区保存到我们读入的文件中而不会询问另一个文件名.在这样的情况下我们可以使用C-x C-w (write-file),这样Emacs就会询问一个文件名并将缓冲区中的内容存入另一个文件中.如果我们正在编辑一个我们并没有从某一个文件读入的缓冲区时,我们也可以使用这样的方法来保存我们的工作.也就是说我们的打开我们的Emacs,然后输入了一些内容,我们就可以用这样的方法来保存我们所输入的内容.当我们完成我们的编辑工作,我们可以通过C-x C-c (save-buffers-kill-emacs).如果在我们的缓冲区中存在一些我们的并没有保存的内容,Emacs就会询问我们的是否要先保存这些内容.
多种多样的文件命令:
在这一部分我们将会学习如何来编辑一个位于远程机器人上的文件和如何来编辑一个压缩文件.如果我们确实是很匆忙的,我们可以先跳过这一部分,但是我们的一定要回过头看一下这一部的内容,因为在这里有一些非常有用的信息.
Emacs允许我们编辑位于远程机器上的文件,也许我们会想到下面的两点:
1 我们要使用一些特殊的语法来告诉Emacs文件的位置.
2 当我们要装入或是保存文件时,我们要使Emacs联接到远程的主机.
要从另一个主机上装入文件,我们要完成下面的两件事:
1 文件所在的主机名.
2 我们在这个主机上的用户名.
然后Emacs就会使用FTP联接来下载我们要编辑的文件.
在这里我们要注意的是如果我们要使用这个特征我们必须允许FTP联接到远程的主机.
要使Emacs装入位于其他主机上的文件,我们可以简单的使用这些我们已经知道的在我们的本地打开文件的命令.我们已经了解了C-x C-f (find-file)和C-x C-v (find-alternate-file).作为文件名,我们要指定我们在远程主机上的用户名,我们可以用下面的语法:
/usr@host:filename
这个语句的构成为:斜线,用户名,标记@,主机名,冒号,文件名.
例如如果我们要以root的身分装入linux.homenet主机上的/etc/passwd文件我们可以输入:
/root@linux.homenet:/etc/passwd
如果我们在远程主机上的用户名与我们当前机器上的用户名相同,我们可以省略usrnme@部分.例如我们要编辑linux.homenet主机用户目录下的.tcshrc文件,我们可以这样来做:
/linux.homenet:~/.tcshrc
在这里我们要注意的就是~代表我们在远程主机上的用户主目录.
当Emacs联接到远程的主机上以后,minibuffer就会显示要我们的输入密码.
Emacs还可以编辑压缩的文件或是文档,也就说以.gz,.Z,.tar,.zip,.arc,.lzh,.zoo文件扩展名的文件.这就可以在我们的磁盘空间相对较低的情况下避免解压文件.
一个名为jka-compr的库可以在Emacs中加入编辑压缩文件的功能,这个功能可以做到透明(Transparent)的读取和写入由gzip或是compress压缩的文件.在这里透明意味着事实上我们并没有注意到这是一个压缩的文件.
Emacs可以识别的压缩文件必须是以.gz,.Z,.tgz为扩展名的文件.最后一个扩展名的文件是用tar归档,用gzip压缩的文件.
当我们装入一个压缩文件时,Emacs在向我们显示文件之前进行简单的解压.当我们保存文件时,他会在将这个文件写入硬盘时进行压缩.所以对我们来说是透明的.要加入这个特性,我们要在我们的.emacs文件中加入下面的几句:
(require 'jka-compr)
(jka-compr-install)
如果我们并没有使用XEmacs,那么我们可以不加入第二行.
当我们装入一个归档文件时,Emacs会向我们显示出这个归档文件中的文件列表.Tar归档文件是由一个叫做tar-mode的库来处理的,而Zip,Arc,Lzf,Zoo归档文件是由名为arc-mode的库来处理的.这就意味着这两个归档文件的设置接口是有一些不同的.
当光标位于某一个文件上时我们敲入回车,这个文件就会被装入缓冲区,这时我们就可以编辑这个文件.当我们进行保存时,归档文件会自动进行更新.
然而对tar归档文件来说这并不是完全正确的,要更新tar文件,我们需要保存包含有tar归档文件的缓冲区.
在菜单中有许多不同的函数功能可以处理这些归档文件:我们从这个归档文件中复制文件或是向这个归档文件中是复制文件,重命名文件或是更改文件的权限等等.
文档模板:
Emacs的一个主要的哲学就是我们应将我们的时间花在有意义地方,而不是去那些琐碎无变化的任务(One of the main philosophies of Emacs is that you should spend your time being a genius instead of doing trivial monotonous tasks!).如果我们在使用Emacs时可以记住这一点,我们就会发现我们所要做的事情Emacs可以会较少的敲击键盘或是根本不用敲击键盘就可以完成这些工作.
这其中的一个例子就是新建一个文件.当我们创建一个新文件时,大多数的情况下我们的最初的几分钟会花费在插入一些文本,而这些文本是我们在上一次创建一个类似的文件时插入过的,例如,我们上一次创建的是一个HTML文档.
对这个问题的一个解决办法就是使Emacs插入一个模板.这个模板会根据我们是否写C程序,HTML文档或是写给奶奶的信而有所不同.更进一步说,HTML文件的设置模板是与其他的文件模板不同的.我们个人主页的HTML文件也许会不同于我们为我们的公司设计的文件.或者说是一个程序的模板会不同于另一个.
当我们创建一个新文件时,Emacs会根据文件的扩展名来查找相应的模板.也就是说当我们的创建了一个名为test.html的文件,Emacs就会查找一个名为TEMPLATE.html.tpl的模板.而如果我们创建是一个名为letter.txt的文件,Emacs就会查找名为TEMPLATE.txt.tpl的模板.
当要找一个模板时,Emacs首先会在新文件所在的目录下进行查找,如果Emacs没有找到,Emacs就会在名为Templates的子目录下进行查找.如果仍然没有找到,Emacs就会在父目录和名为Templates的子目录下进行查找.Emacs以这样的方式进行查找直到我们的用户主目录的顶部.如果Emacs仍然没有找到,Emacs就会在我们有可能已经定了模板的地方进行查找.
例如,如果我们的创建了一个名为~/work/Emacs-project/note.txt的文件而我们所有的标准模板位于目录~/lib/template目录下.Emacs就会以下面的方式进行查找:
1.~/work/Emacs-project/TEMPLATE.txt.tpl
2.~/work/Emacs-project/Templates/TEMPLATE.txt.tpl
3.~/work/TEMPLATE.txt.tpl
4.~/work/Templates/TEMPLATE.txt.tpl
5.~/TEMPLATE.txt.tpl
6.~/Templates/TEMPLATE.txt.tpl
7.~/lib/templates/TEMPLATE.txt.tpl
也许我们会很奇怪这样的查找方式,然而这样的方式由于下面的原因是相当的重要的:
1.通过在当前目录和Templates子目录中进行查找,我们就有时会在一个子目录中隐藏我们的模板,因为我们不希望这些模板与其他的文件混在一起.换句说我们并不必须这样的来做.
2通过这样的路径进行查找,我们也许会在子目录或是上一级目录中找到特殊的模板.例如也许我们有一个名为Letters的目录,在这个目录中存放着我们所有的信件.在这个目录下也许我们会放一个普通的模板,这个模板会插入一些类似Dear...的话以及当前的日期.而在一个Letter的子目录中我们也许会存放一些写给我们的男朋友或是女朋友的信.这个模板会插入一些类似Yours forever的话.
3通过最后在标准的模板目录中进行查找,我们就会查找到所有的通用模板.
模板可以包含一些由标准行(stand-ins)所组成的文本.这些行可能被其他的文本替换或是当基于这个模板创建一个新文件时在缓冲区中进行标记.标准行的格式为(>>>letter<<<),例如>>>P<<<设置当我们的新建一个文档时位于缓冲区中的这一点,>>>A<<<可以插入我们的邮件地址.
下面列出一些不需用户定义的代码:
代码 例子 描述
文件和目录类:
(>>>DIR<<<) ~/Letters/ 文件名部分目录
(>>>FILE<<<) Gretchen.txt 没有目录的文件名
(>>>RILE_RAW<<<) Gretchen 没有扩展名的文件名
(>>>EILE_EXT<<<) txt 文件名的扩展名(没有逗点)
时间日期类:
(>>>DATE<<<) 07 Jan 1999
20:17:29 日期和时间
(>>>ISO_DATE<<<) 1999-01-07 ISO 8601 日期
系统信息类:
(>>>AUTHOR<<<) blackie@ifad.dk 完整Email地址
(>>>LOGIN_NAME<<<) blackie 登陆名
(>>>HOST_ADDRE<<<) ifad.dk 主机名
(>>>USER_NAMEE<<<) Jesper 用户真名
位置类:
(>>>POINT<<<) 这个设置点,当然只有这个点可以进行设置
(>>>MARKT<<<) 设置标记,只有标记可以进行设置
(>>>1<<<) (>>>9<<<)
十个可能的位置.要到达这些位置中的任何一个,我们可以按下C-x j(jump-to-register)
一个例子模板如下:
Odense (I<<<)
Dear (>P<<<)
Our record number: (>1<<<)
Cheers (>U<<<)
在我们的模板中,我们也可以插入询问问题的答案.所以在我们的前面的例子中,我们也许希望提示我们要在插在Dear后的名字.如下面的模板:
Odense (>>>I<<<)
Dear (>>>name<<<)
(>>>P<<<)
Our record number: (>>>number<<<)
Cheers (>>>U<<<)
>TEMPLATE-DEFINITION-SECTION<<
("name" "What is the name of the customer? ")
("number" "What is the record number? ")
要使Emacs询问我们问题,我们需要插入一行来表明开始了定义的部分.在这行后的文本是用来定义问题的,所以我们要小心不要插入没有语法的文本.
每一个问题都是与一个单词相联系的.这个单词是作为标准的输入文本.
这样当我们打开一个新的文件时,Emacs会向我们询问问题,而我们的答案也就会插入相应的地方. -
2005-12-23
超级详细Tcpdump 的用法(原创)
第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
# tcpdump
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,
使用-c参数指定要监听的数据包数量,
使用-w参数指定将监听到的数据包写入文件中保存
A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1
B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用 括号时,一定要
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
E 对本机的udp 123 端口进行监视 123 为ntp的服务端口
# tcpdump udp port 123
F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:
#tcpdump -i eth0 src host hostname
G 下面的命令可以监视所有送到主机hostname的数据包:
#tcpdump -i eth0 dst host hostname
H 我们还可以监视通过指定网关的数据包:
#tcpdump -i eth0 gateway Gatewayname
I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:
#tcpdump -i eth0 host hostname and port 80
J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
:(在命令行中适用 括号时,一定要
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,
如果我们只需要列出送到80端口的数据包,用dst port;如果我们只希望看到返回80端口的数据包,用src port。
#tcpdump –i eth0 host hostname and dst port 80 目的端口是80
或者
#tcpdump –i eth0 host hostname and src port 80 源端口是80 一般是提供http的服务的主机
如果条件很多的话 要在条件之前加and 或 or 或 not
#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80
如果在ethernet 使用混杂模式 系统的日志将会记录
May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.
May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode
May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode
tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。 -
2005-12-20
ssh
============\nTitle:\n============\n\nSSH配合SecureCRT的密匙完美使用方法\n\n============\nContent:\n============\n\nlinux下
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.5ilinux.com/ssh01.html
关键字: linux ssh SecureCRT RSA openssh 密匙 公匙 私匙 安全
linux下SSH配合SecureCRT的密匙完美使用方法
我想肯定有不少朋友在使用SecureCRT做为SSH的客户端软件,但都很少使用他的RSA/DSA加密功能吧,怎么你还不知道RSA是什么?
SSH,特别是 OpenSSH,是一个类似于 telnet 或 rsh,ssh 客户程序也可以用于登录到远程机器。所要求的只是该远程机器正在运行 sshd,即 ssh 服务器进程。但是,与 telnet 不同的是,ssh 协议非常安全。加密数据流,确保数据流的完整性,甚至安全可靠的进行认证它都使用了专门的算法。
然而,虽然 ssh 的确很棒,但还是有一个 ssh 功能组件常常被忽略、这个组件就是 OpenSSH 的 RSA/DSA 密钥认证系统,它可以代替 OpenSSH 缺省使用的标准安全密码认证系统。
OpenSSH 的 RSA 和 DSA 认证协议的基础是一对专门生成的密钥,分别叫做专用密钥和公用密钥。使用这些基于密钥的认证系统的优势在于:在许多情况下,有可能不必手工输入密码就能建立起安全的连接。
好了知道RSA和DSA是怎么回事了吧,至于里面的原理我就不讲了,有兴趣的朋友去看看公匙密匙的原理就行。其实不止SecureCRT支持RSA/DSA,其他ssh的客户端软件都支持类似的RSA/DSA,只不过好像不同软件产生的公匙密匙好像不通用。我这里只是拿最典型的SecureCRT来说明RSA怎么使用来配合linux下的ssh服务
我的环境:Redhat9.0 openssh-3.5p1-6 SecureCRT 4.0
服务端openssh我们先不可以设置,等客户端设置好后,我们再回过头来设置ssh。
我们创建一个新链接,点击属性:(图1)
默认验证方式是password,把他改成RSA,接着系统会弹出一个弹出框(图2)让你确认是否使用RSA公匙密匙创建向导,当然选“是”(图3)
接着下一步:(图4)
这一步填入你的保护密匙的密码,这个密码要记住哦,以后都要这个密码,Comment就随便填了
下一步:(图5)
让你选择加密的位数,默认1024就行
下一步:(图6)
这一步你动一下鼠标,系统就会根据你鼠标动的频率自动产生公匙和密匙
下一步:(图7)
RSA公匙密匙创建好后,会让你保存,名字默认或者改名都行,后面大家只要注意SecureCRT只寻找密匙的路径,你保证SecureCRT能找到你的密匙就行。
好了客户端的工作完成。下面是linux服务端的配置了
把我们刚才建立的RSA公匙传到你的服务器,默认名为identity.pub
然后在linux下操作,如果你的密匙是给linux用户frank创建的,那么我们先在frank的宿主目录创建一个.ssh的目录
mkdir /home/frank/.ssh
chmod o+x /home/frank
chmod 700 /home/frank/.ssh
然后把公匙导到authorized_keys这个文件,因为我们是使用ssh1,如果是ssh2的那就是authorized_keys2
cat identity.pub > /home/frank/.ssh/authorized_keys
chmod 644 /home/frank/.ssh/authorized_keys
权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能,大家如果调试的过程中,发现有找不到公匙的错误提示,先看看权限是否设置正确哦!
ok,现在服务器端也设置完毕了,你现在可以用SecureCRT的RSA验证方式连接ssh服务器端了,如果连接正常的话应该会弹出一个对话框,让你输入密码(图8)
这里只要输入我们保护密匙的密码就行了。完了就能顺利进入
还有一步设置,既然大家都已经成功使用了ssh的RSA功能,那么就必须让openssh只支持RSA验证,否则既支持普通密码又支持RSA就没什么意思了,根本没把安全提高,所以我们有必要让openssh只支持RSA验证,如果还没有成功使用RSA功能的朋友就不用看,还是先把上面的的先实现再说。
要实现openssh只支持RSA验证方式,我们只要修改
vi /etc/ssh/sshd_config
设置
PasswordAuthentication no
好了,你现在再试试以前普通密码验证方式,应该是会弹出下面错误信息(图9)
大致意思服务器只支持RSA的验证方式,ok了
以后就可以用RSA的公匙密匙访问ssh服务器了,不过你的密匙可要保存好,反正我是保存在我的U盘,随身携带,一旦你的用户丢了密匙,一定在服务器端把它的公匙删除,这样即使那人获得了密匙也上不去:)
参考文档
OpenSSH 密钥管理 http://www-900.ibm.com/developerWorks/cn/linux/security/openssh/part1/index.shtml
/>
张微波
\n============\nExcerpt:\n============\n\nlinux下SSH配合SecureCRT的密匙完美使用方法
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.5ilinux.com/ssh01.html
关键字: linux ssh SecureCRT RSA openssh 密匙 公匙 私匙 安全
linux下SSH配合SecureCRT的密匙完美使用方法
我想肯定有不少朋友在使用SecureCRT做为SSH的客户端软件,但都很少使用他的RSA/DSA加密功能吧,怎么你还不知道RSA是什么?
SSH,特别是 OpenSSH,是一个类似于 telnet 或 rsh,ssh 客户程序也可以用于登录到远程机器。所要求的只是该远程机器正在运行 sshd,即 ssh 服务器进程。但是,与 telnet 不同的是,ssh 协议非常安全。加密数据流,确保数据流的完整性,甚至安全可靠的进行认证它都使用了专门的算法。
然而,虽然 ssh 的确很棒,但还是有一个 ssh 功能组件常常被忽略、这个组件就是 OpenSSH 的 RSA/DSA 密钥认证系统,它可以代替 OpenSSH 缺省使用的标准安全密码认证系统。
OpenSSH 的 RSA 和 DSA 认证协议的基础是一对专门生成的密钥,分别叫做专用密钥和公用密钥。使用这些基于密钥的认证系统的优势在于:在许多情况下,有可能不必手工输入密码就能建立起安全的连接。
好了知道RSA和DSA是怎么回事了吧,至于里面的原理我就不讲了,有兴趣的朋友去看看公匙密匙的原理就行。其实不止SecureCRT支持RSA/DSA,其他ssh的客户端软件都支持类似的RSA/DSA,只不过好像不同软件产生的公匙密匙好像不通用。我这里只是拿最典型的SecureCRT来说明RSA怎么使用来配合linux下的ssh服务
我的环境:Redhat9.0 openssh-3.5p1-6 SecureCRT 4.0
服务端openssh我们先不可以设置,等客户端设置好后,我们再回过头来设置ssh。
我们创建一个新链接,点击属性:(图1)
默认验证方式是password,把他改成RSA,接着系统会弹出一个弹出框(图2)
让你确认是否使用RSA公匙密匙创建向导,当然选“是”(图3)
接着下一步:(图4)
这一步填入你的保护密匙的密码,这个密码要记住哦,以后都要这个密码,Comment就随便填了
下一步:(图5)
让你选择加密的位数,默认1024就行
下一步:(图6)
这一步你动一下鼠标,系统就会根据你鼠标动的频率自动产生公匙和密匙
下一步:(图7)
RSA公匙密匙创建好后,会让你保存,名字默认或者改名都行,后面大家只要注意SecureCRT只寻找密匙的路径,你保证SecureCRT能找到你的密匙就行。
好了客户端的工作完成。下面是linux服务端的配置了
把我们刚才建立的RSA公匙传到你的服务器,默认名为identity.pub
然后在linux下操作,如果你的密匙是给linux用户frank创建的,那么我们先在frank的宿主目录创建一个.ssh的目录
mkdir /home/frank/.ssh
chmod o+x /home/frank
chmod 700 /home/frank/.ssh
然后把公匙导到authorized_keys这个文件,因为我们是使用ssh1,如果是ssh2的那就是authorized_keys2
cat identity.pub > /home/frank/.ssh/authorized_keys
chmod 644 /home/frank/.ssh/authorized_keys
权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能,大家如果调试的过程中,发现有找不到公匙的错误提示,先看看权限是否设置正确哦!
ok,现在服务器端也设置完毕了,你现在可以用SecureCRT的RSA验证方式连接ssh服务器端了,如果连接正常的话应该会弹出一个对话框,让你输入密码(图8)
这里只要输入我们保护密匙的密码就行了。完了就能顺利进入
还有一步设置,既然大家都已经成功使用了ssh的RSA功能,那么就必须让openssh只支持RSA验证,否则既支持普通密码又支持RSA就没什么意思了,根本没把安全提高,所以我们有必要让openssh只支持RSA验证,如果还没有成功使用RSA功能的朋友就不用看,还是先把上面的的先实现再说。
要实现openssh只支持RSA验证方式,我们只要修改
vi /etc/ssh/sshd_config
设置
PasswordAuthentication no
好了,你现在再试试以前普通密码验证方式,应该是会弹出下面错误信息(图9)
大致意思服务器只支持RSA的验证方式,ok了
以后就可以用RSA的公匙密匙访问ssh服务器了,不过你的密匙可要保存好,反正我是保存在我的U盘,随身携带,一旦你的用户丢了密匙,一定在服务器端把它的公匙删除,这样即使那人获得了密匙也上不去:)
参考文档
OpenSSH 密钥管理 http://www-900.ibm.com/developerWorks/cn/linux/security/openssh/part1/index.shtml
>
张微波
\n============\nTrackBack:\n============\n\n\n







