<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tcpdump on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/tags/tcpdump/</link>
    <description>Recent content in Tcpdump on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 22 Nov 2013 05:22:58 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/tags/tcpdump/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>packet captured和packet received by filter到底有什么区别</title>
      <link>https://ykyi.net/?p=1047/</link>
      <pubDate>Fri, 22 Nov 2013 05:22:58 +0000</pubDate>
      <guid>https://ykyi.net/?p=1047/</guid>
      <description>&lt;div&gt;
  &lt;p&gt;
    我用的是linux.&amp;nbsp;结论是 packet received by filter是tcpdump从内核中拿到的且匹配命令上行指定的过滤条件的包， packet captured是经由pcap_loop, 或&amp;nbsp;&lt;span style=&#34;font-size: 13px;&#34;&gt;pcap_dispatch 或 pcap_next，把包交给回调处理过的包的数量。这两个数字的差值是tcpdump抓到的，还来不及处理的包。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;span style=&#34;font-size: 13px;&#34;&gt;下面是讨论的一些细节:&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    /////////////
  &lt;/p&gt;
  &lt;p&gt;
    tcpdump的最后输出.&amp;nbsp;592个包captured,&amp;nbsp;&amp;nbsp;1184个包received&amp;nbsp;by&amp;nbsp;filter。。这个差值是不是表示有多少包tcpdump没来得及处理.
  &lt;/p&gt;
  &lt;p&gt;
    man&amp;nbsp;tcpdump上写得好复杂，received&amp;nbsp;by&amp;nbsp;filter的数字取决于OS&amp;#8230;&amp;nbsp;1.&amp;nbsp;包匹配不匹配命令行上指定的filter都算，如果匹配，有没有被tcpdump读出都算..&amp;nbsp;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;只有匹配命令行上指定的filter的包才算，有没有被tcpdump读出都算.&amp;nbsp;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;只有匹配filter才算，只有被tcpdump读出才算.
  &lt;/p&gt;
  &lt;p&gt;
    我的理解是：如果是第3种，那captured的数字和received&amp;nbsp;by&amp;nbsp;filter的数字就是一样的。&amp;nbsp;第2种的差值表示tcpdump来不及处理的包数量，理想状态上差值能为0.&amp;nbsp;&amp;nbsp;&amp;nbsp;第1种情况，基本上总是有差值。
  &lt;/p&gt;
  &lt;p&gt;
    我猜测我用的linux上应该是第2种情况.&amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    wangbin579()&amp;nbsp;10:18:54&amp;nbsp;&lt;br /&gt; 应该是匹配的才算received&amp;nbsp;by&amp;nbsp;filter，但奇怪的是，为啥你的系统，captured怎么少？&lt;br /&gt; wangbin579()&amp;nbsp;10:19:30&amp;nbsp;&lt;br /&gt; [root@hz0-12-157&amp;nbsp;~]#&amp;nbsp;tcpdump&amp;nbsp;-i&amp;nbsp;any&amp;nbsp;tcp&amp;nbsp;and&amp;nbsp;port&amp;nbsp;36524&amp;nbsp;or&amp;nbsp;3306&amp;nbsp;-w&amp;nbsp;all.pcap&lt;br /&gt; tcpdump:&amp;nbsp;listening&amp;nbsp;on&amp;nbsp;any,&amp;nbsp;link-type&amp;nbsp;LINUX_SLL&amp;nbsp;(Linux&amp;nbsp;cooked),&amp;nbsp;capture&amp;nbsp;size&amp;nbsp;65535&amp;nbsp;bytes&lt;br /&gt; 10757&amp;nbsp;packets&amp;nbsp;captured&lt;br /&gt; 11171&amp;nbsp;packets&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter&lt;br /&gt; 334&amp;nbsp;packets&amp;nbsp;dropped&amp;nbsp;by&amp;nbsp;kernel&lt;br /&gt; wangbin579()&amp;nbsp;10:20:07&amp;nbsp;&lt;br /&gt; 我们这边系统，基本可以认为packets&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter=packets&amp;nbsp;captured&amp;nbsp;+&amp;nbsp;packets&amp;nbsp;dropped&amp;nbsp;by&amp;nbsp;kernel
  &lt;/p&gt;
  &lt;p&gt;
    siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:23:38&amp;nbsp;&lt;br /&gt; /home&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; height=&#34;25&#34; src=&#34;file:///C:\Users\KAMUSZ~1\AppData\Local\Temp\ksohtml\wps_clip_image-14656.png&#34; width=&#34;25&#34; /&gt;mus/tmp&amp;nbsp;#&amp;nbsp;time&amp;nbsp;time&amp;nbsp;tcpdump&amp;nbsp;-i&amp;nbsp;tunl0:1&amp;nbsp;&amp;nbsp;-w&amp;nbsp;tmp&lt;br /&gt; tcpdump:&amp;nbsp;listening&amp;nbsp;on&amp;nbsp;tunl0:1,&amp;nbsp;link-type&amp;nbsp;RAW&amp;nbsp;(Raw&amp;nbsp;IP),&amp;nbsp;capture&amp;nbsp;size&amp;nbsp;96&amp;nbsp;bytes&lt;br /&gt; 19508&amp;nbsp;packets&amp;nbsp;captured&lt;br /&gt; 39021&amp;nbsp;packets&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter&lt;br /&gt; 0&amp;nbsp;packets&amp;nbsp;dropped&amp;nbsp;by&amp;nbsp;kernel&lt;br /&gt; 0.01user&amp;nbsp;0.02system&amp;nbsp;0:17.04elapsed&amp;nbsp;0%CPU&amp;nbsp;(0avgtext+0avgdata&amp;nbsp;0maxresident)k&lt;br /&gt; 0inputs+0outputs&amp;nbsp;(0major+506minor)pagefaults&amp;nbsp;0swaps
  &lt;/p&gt;
  &lt;p&gt;
    real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m17.139s&lt;br /&gt; user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.012s&lt;br /&gt; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.028s&lt;br /&gt; wangbin579()&amp;nbsp;10:26:03&amp;nbsp;&lt;br /&gt; 如果是差是丢包，那么通过查看抓包文件，应该能看出很多不完整的session&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:28:46&amp;nbsp;&lt;br /&gt; 我觉得差值是来不及写入磁盘的包.&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:29:04&amp;nbsp;&lt;br /&gt; 再研究看看了。。谢谢啦/..&lt;br /&gt; wangbin579()&amp;nbsp;10:30:03&amp;nbsp;&lt;br /&gt; packets&amp;nbsp;captured是pcap_loop所设置的回调函数所调用的，一旦调用回调函数，就用统计&lt;br /&gt; wangbin579()&amp;nbsp;10:30:37&amp;nbsp;&lt;br /&gt; 有可能内核态部分和用户态部分，速度上不匹配，有延迟导致的？&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:32:33&amp;nbsp;&lt;br /&gt; 我现在理解,&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter是pcap库从内核中拿到的又匹配命令行上filter的包的数量，&amp;nbsp;packets&amp;nbsp;captured是经由pcap_loop,&amp;nbsp;pcap_dispatch之类通过callback交付出去的包数量.&amp;nbsp;差值就是还没来得及处理的.&lt;br /&gt; wangbin579()&amp;nbsp;10:32:48&amp;nbsp;&lt;br /&gt; 17s，每秒也就2000多个，不算多，用户态程序应该来得及处理
  &lt;/p&gt;
  &lt;p&gt;
    wangbin579()&amp;nbsp;10:33:58&amp;nbsp;&lt;br /&gt; 我这边系统很破，处理速度也比这个快，也没有来不及处理&lt;br /&gt; wangbin579()&amp;nbsp;10:34:45&amp;nbsp;&lt;br /&gt; 看看我的：&lt;br /&gt; wangbin579()&amp;nbsp;10:34:47&amp;nbsp;&lt;br /&gt; [root@hz0-12-157&amp;nbsp;~]#&amp;nbsp;time&amp;nbsp;tcpdump&amp;nbsp;-i&amp;nbsp;any&amp;nbsp;tcp&amp;nbsp;and&amp;nbsp;port&amp;nbsp;36524&amp;nbsp;or&amp;nbsp;3306&amp;nbsp;-w&amp;nbsp;3306.pcap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; tcpdump:&amp;nbsp;listening&amp;nbsp;on&amp;nbsp;any,&amp;nbsp;link-type&amp;nbsp;LINUX_SLL&amp;nbsp;(Linux&amp;nbsp;cooked),&amp;nbsp;capture&amp;nbsp;size&amp;nbsp;65535&amp;nbsp;bytes&lt;br /&gt; 294663&amp;nbsp;packets&amp;nbsp;captured&lt;br /&gt; 295432&amp;nbsp;packets&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter&lt;br /&gt; 693&amp;nbsp;packets&amp;nbsp;dropped&amp;nbsp;by&amp;nbsp;kernel
  &lt;/p&gt;
  &lt;p&gt;
    real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m17.676s&lt;br /&gt; user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.897s&lt;br /&gt; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m3.502s&lt;br /&gt; wangbin579()&amp;nbsp;10:35:52&amp;nbsp;&lt;br /&gt; 量比你大7倍多，也没有出现来不及处理啊，当然我的是物理机，3G内存，&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:36:59&amp;nbsp;&lt;br /&gt; 呃&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; height=&#34;25&#34; src=&#34;file:///C:\Users\KAMUSZ~1\AppData\Local\Temp\ksohtml\wps_clip_image-30198.png&#34; width=&#34;25&#34; /&gt;&amp;nbsp;那你觉得这个差值不是来不及处理的包么？。我觉得应该还是来不及处理的。我在想，可能是写到的磁盘文件系统是NFS之类的&amp;nbsp;&amp;#8230;.我继续排查一下。&lt;br /&gt; wangbin579()&amp;nbsp;10:37:43&amp;nbsp;&lt;br /&gt; 有可能，我的是写入本地磁盘。&lt;br /&gt; wangbin579()&amp;nbsp;10:37:58&amp;nbsp;&lt;br /&gt; 你这种情况，我还是第一次碰到&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:39:05&amp;nbsp;&lt;br /&gt; 我先去运维那边了解下情况&amp;#8230;多谢啦&amp;nbsp;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; height=&#34;25&#34; src=&#34;file:///C:\Users\KAMUSZ~1\AppData\Local\Temp\ksohtml\wps_clip_image-16870.png&#34; width=&#34;25&#34; /&gt;&lt;br /&gt; wangbin579()&amp;nbsp;10:39:18&amp;nbsp;&lt;br /&gt; 算涨见识了，还以为一般dropped&amp;nbsp;by&amp;nbsp;kernel为0就代表不丢包呢，居然还有你这种情况。&lt;br /&gt; 你可以看看抓包文件，session是不是很多不完整，如果不完整，你的推测是对的&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:39:58&amp;nbsp;&lt;br /&gt; 嗯。呵呵~~&amp;nbsp;做IT，每天都会碰到挑战宇宙规律的现象。&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:40:07&amp;nbsp;&lt;br /&gt; &lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; height=&#34;25&#34; src=&#34;file:///C:\Users\KAMUSZ~1\AppData\Local\Temp\ksohtml\wps_clip_image-6803.png&#34; width=&#34;25&#34; /&gt;&lt;br /&gt; мe(～&amp;nbsp;o&amp;nbsp;мe(632813052)&amp;nbsp;10:41:09&amp;nbsp;&lt;br /&gt; 呵呵&lt;br /&gt; wangbin579()&amp;nbsp;10:41:24&amp;nbsp;&lt;br /&gt; 其实，网络方面的问题，最复杂了。&lt;br /&gt; 我现在已经陷入到网络的汪洋大海之中了，各种各样的问题都会有，而且没有尽头。&lt;br /&gt; 早知道如此，3年前我就不搞这一块了&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:42:30&amp;nbsp;&lt;br /&gt; 同感。写一点点代码，都非常难以调试。各种认为理所当然的假设，通通是bug的温床
  &lt;/p&gt;
  &lt;p&gt;
    @wangbin579&amp;nbsp;&amp;nbsp;麻烦你在tcpdump前加个time，。。把输出贴出来。我好像看出问题来了。
  &lt;/p&gt;
  &lt;p&gt;
    [root@hz0-12-157&amp;nbsp;~]#&amp;nbsp;time&amp;nbsp;tcpdump&amp;nbsp;-i&amp;nbsp;any&amp;nbsp;tcp&amp;nbsp;and&amp;nbsp;port&amp;nbsp;36524&amp;nbsp;or&amp;nbsp;3306&amp;nbsp;-w&amp;nbsp;3306.pcap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; tcpdump:&amp;nbsp;listening&amp;nbsp;on&amp;nbsp;any,&amp;nbsp;link-type&amp;nbsp;LINUX_SLL&amp;nbsp;(Linux&amp;nbsp;cooked),&amp;nbsp;capture&amp;nbsp;size&amp;nbsp;65535&amp;nbsp;bytes&lt;br /&gt; 294663&amp;nbsp;packets&amp;nbsp;captured&lt;br /&gt; 295432&amp;nbsp;packets&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter&lt;br /&gt; 693&amp;nbsp;packets&amp;nbsp;dropped&amp;nbsp;by&amp;nbsp;kernel
  &lt;/p&gt;
  &lt;p&gt;
    real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m17.676s&lt;br /&gt; user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.897s&lt;br /&gt; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m3.502s&lt;br /&gt; wangbin579()&amp;nbsp;10:56:03&amp;nbsp;&lt;br /&gt; 不是加了time了吗？&lt;br /&gt; wangbin579()&amp;nbsp;10:57:15&amp;nbsp;&lt;br /&gt; [root@hz0-12-157&amp;nbsp;~]#&amp;nbsp;time&amp;nbsp;time&amp;nbsp;tcpdump&amp;nbsp;-i&amp;nbsp;any&amp;nbsp;tcp&amp;nbsp;and&amp;nbsp;port&amp;nbsp;36524&amp;nbsp;or&amp;nbsp;3306&amp;nbsp;-w&amp;nbsp;3306.pcap&lt;br /&gt; tcpdump:&amp;nbsp;listening&amp;nbsp;on&amp;nbsp;any,&amp;nbsp;link-type&amp;nbsp;LINUX_SLL&amp;nbsp;(Linux&amp;nbsp;cooked),&amp;nbsp;capture&amp;nbsp;size&amp;nbsp;65535&amp;nbsp;bytes&lt;br /&gt; ^C202061&amp;nbsp;packets&amp;nbsp;captured&lt;br /&gt; 202523&amp;nbsp;packets&amp;nbsp;received&amp;nbsp;by&amp;nbsp;filter&lt;br /&gt; 369&amp;nbsp;packets&amp;nbsp;dropped&amp;nbsp;by&amp;nbsp;kernel&lt;br /&gt; 0.66user&amp;nbsp;2.50system&amp;nbsp;0:11.99elapsed&amp;nbsp;26%CPU&amp;nbsp;(0avgtext+0avgdata&amp;nbsp;24208maxresident)k&lt;br /&gt; 0inputs+105656outputs&amp;nbsp;(0major+660minor)pagefaults&amp;nbsp;0swaps
  &lt;/p&gt;
  &lt;p&gt;
    real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m11.999s&lt;br /&gt; user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.661s&lt;br /&gt; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0m2.506s&lt;br /&gt; wangbin579()&amp;nbsp;10:57:26&amp;nbsp;&lt;br /&gt; 加两个，结果如上&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;10:59:29&amp;nbsp;&lt;br /&gt; 问题找到的。我这边运行的tcpdump，根本就没有抢到cpu时间来处理.&lt;br /&gt; wangbin579()&amp;nbsp;11:00:05&amp;nbsp;&lt;br /&gt; &lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; height=&#34;25&#34; src=&#34;file:///C:\Users\KAMUSZ~1\AppData\Local\Temp\ksohtml\wps_clip_image-21252.png&#34; width=&#34;25&#34; /&gt;&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;11:00:06&amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    Real&amp;nbsp;&amp;nbsp;0m3.914s
  &lt;/p&gt;
  &lt;p&gt;
    User&amp;nbsp;&amp;nbsp;0m0.008s
  &lt;/p&gt;
  &lt;p&gt;
    Sys&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.000s
  &lt;/p&gt;
  &lt;p&gt;
    跑了4秒钟，用户空间才抢到0.008秒，内核态几乎是0&amp;nbsp;&amp;#8230;.&lt;br /&gt; siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;11:00:25&amp;nbsp;&lt;br /&gt; 那个差值确实是没有来得及处理的包的数量。&lt;br /&gt; wangbin579()&amp;nbsp;11:00:41&amp;nbsp;&lt;br /&gt; 奥，那你系统这么繁忙啊
  &lt;/p&gt;
  &lt;p&gt;
    siu&amp;sup1;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;&amp;ordm;()&amp;nbsp;11:02:22&amp;nbsp;&lt;br /&gt; 所以，解决了一个问题又会有新的颠覆宇宙规律的问题&amp;#8230;系统负载很高，但cpu使用率很低。。
  &lt;/p&gt;
  &lt;p&gt;
    &lt;span style=&#34;color: rgb(0, 0, 0); font-family: Verdana, Geneva, sans-serif; font-size: 16px; line-height: 22px;&#34;&gt;copyright ykyi.net&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>Linux抓包技术简介</title>
      <link>https://ykyi.net/?p=1006/</link>
      <pubDate>Tue, 10 Sep 2013 05:05:03 +0000</pubDate>
      <guid>https://ykyi.net/?p=1006/</guid>
      <description>&lt;div&gt;
  &lt;p&gt;
    Linux抓包技术简介
  &lt;/p&gt;
  &lt;p&gt;
    Author: zausiu@gmail.com
  &lt;/p&gt;
  &lt;p&gt;
    1.&amp;nbsp;简介
  &lt;/p&gt;
  &lt;p&gt;
    大多数应用常景下，我们在IP层上用AF_INET或AF_INET6作为socket的第一个参数，SOCK_STREAM或SOCK_DGRAM作为socket的第二个参数创建最为常见的IPv4或IPv6的TCP或UDP套接字。这样的套接字满足了绝大多数网络应用常景。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    本文简单介绍三种Linux平台下抓包，截获包的技术。它们提供一些更酷的功能。每种技术的水都很深，作者个人水平有限，按照自己的理解做一般的介绍。仅仅旨在起到科谱的作用。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    2.&amp;nbsp;RAW&amp;nbsp;SOCKET
  &lt;/p&gt;
  &lt;p&gt;
    参数SOCK_RAW可以作为socket函数的第二个参数传入，这样创建的套接字称为原始套接字。设置Socket的第一个参数可以让指定原始套接字开在数据链路层上或者网络层。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    下面的语句创建在数据链路层上的原始socket。
  &lt;/p&gt;
  &lt;p&gt;
    Socket(AF_PACKET,&amp;nbsp;SOCK_RAW,&amp;nbsp;htons(ETH_P_ALL));&amp;nbsp;&amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    在负载不大的情况下，读这个socket可以拿到本机收到的所有数据包。写入这个socket需要程序员负责填充各种包头的数据。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    Socket(AF_INET,&amp;nbsp;SOCK_RAW,&amp;nbsp;xxxxx协议号)；
  &lt;/p&gt;
  &lt;p&gt;
    在IP层上创建IPv4的RAW&amp;nbsp;socket，可以拿到各种经由IPv4的数据包，比如ICMP包，IGMP包等。Steven的&lt;Unix网络编程&gt;第三版第28.4节，第二段：&amp;ldquo;系统收到的UDP包和TCP包不会传给原始套接字&amp;rdquo;。但读tcpcopy的源代码时，确实用了原始套接字在网络层读UDP和TCP包。难道书上写的过时了。见代码，来自tcpcopy：
  &lt;/p&gt;
  &lt;p&gt;
    #if&amp;nbsp;(TCPCOPY_UDP)
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fd&amp;nbsp;=&amp;nbsp;socket(AF_INET,&amp;nbsp;SOCK_RAW,&amp;nbsp;IPPROTO_UDP);
  &lt;/p&gt;
  &lt;p&gt;
    #else
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fd&amp;nbsp;=&amp;nbsp;socket(AF_INET,&amp;nbsp;SOCK_RAW,&amp;nbsp;IPPROTO_TCP);
  &lt;/p&gt;
  &lt;p&gt;
    #endif
  &lt;/p&gt;
  &lt;p&gt;
    另外，在IP层上创建的原始套接字有一个选项：IP_HDRINCL，它被开启时，则内核帮助填充IP包头。Linux默认没有开启这个选项。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    3.&amp;nbsp;NF_Queue
  &lt;/p&gt;
  &lt;p&gt;
    NF_Queue是用户空间的一个库，需要内核模块NETFILTER_NETLINK_QUEUE的支持。官方网址：&lt;a href=&#34;http://www.netfilter.org/&#34;&gt;http://www.netfilter.org&lt;/a&gt;。通过这个库可以在数据包被发往用户空间处理前截获数据包，或者在数据包被发往网卡前截获数据库。截获后，可以修改数据包的内容，并决定是否丢充这个数据库。
  &lt;/p&gt;
  &lt;p&gt;
    NF_Queue可以用来编写防火墙等安全软件。
  &lt;/p&gt;
  &lt;p&gt;
    Tcpcopy使用NF_Queue丢弃测试中的程序回复给真实客户程序的数据包，使测试中程序回复的报文不影响真实客户程序。
  &lt;/p&gt;
  &lt;p&gt;
    另一个提供类似功能的库是IP_Queue，它已经被废弃。NF_Queue可以完全取代IP_Queue。我们用的tlinux，内核中built-in了NF_Queue模块。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    4.&amp;nbsp;libpcap
  &lt;/p&gt;
  &lt;p&gt;
    大名鼎鼎的Libpcap是一个古老的可以工作在所有Unix-like平台上的抓包库，比linux年纪更大。Tcpdump的广泛使用让libpcap成为事实上的行业标准。它可以很方便的编写抓取数据链路层上的数据包，并可以设置过滤条件在内核级别只复制关心的数据包，而数据链路层上的原始套接字会尽最大努力复制所有的包，所以libpcap的工作效率高。而且，pcap使用方便。下面是一个很简单的使用pcap抓到发往80端口的tcp包并打印源IP，目的IP，和目的端口号的程序。非常短，很容易看，起到介绍libpcap的作用。
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;*argv[])
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;{
  &lt;/p&gt;
  &lt;p&gt;
    pcap_t&amp;nbsp;*handle; //&amp;nbsp;pcap用的句柄，和其它各种句柄一样。
  &lt;/p&gt;
  &lt;p&gt;
    char&amp;nbsp;*dev; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;网络接口名，如eth0,&amp;nbsp;eth1,&amp;nbsp;tunl0&amp;nbsp;之类
  &lt;/p&gt;
  &lt;p&gt;
    char&amp;nbsp;errbuf[PCAP_ERRBUF_SIZE]; //&amp;nbsp;存描述出错原因的缓冲
  &lt;/p&gt;
  &lt;p&gt;
    struct&amp;nbsp;bpf_program&amp;nbsp;fp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;pcap用来过滤数据包用
  &lt;/p&gt;
  &lt;p&gt;
    char&amp;nbsp;filter_exp[]&amp;nbsp;=&amp;nbsp;&#34;tcp&amp;nbsp;and&amp;nbsp;dst&amp;nbsp;port&amp;nbsp;80&#34;;&amp;nbsp;//&amp;nbsp;过滤字符串，和tcpdump的写法一样
  &lt;/p&gt;
  &lt;p&gt;
    struct&amp;nbsp;pcap_pkthdr&amp;nbsp;header;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;pcap自己用的包头
  &lt;/p&gt;
  &lt;p&gt;
    const&amp;nbsp;u_char&amp;nbsp;*packet; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;pcap包头后的数据，即抓到的数据
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    int&amp;nbsp;len_of_iphdr;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;ip头的长度
  &lt;/p&gt;
  &lt;p&gt;
    struct&amp;nbsp;in_addr&amp;nbsp;src_ip;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;源IP地址
  &lt;/p&gt;
  &lt;p&gt;
    struct&amp;nbsp;in_addr&amp;nbsp;dst_ip;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;目的IP
  &lt;/p&gt;
  &lt;p&gt;
    const&amp;nbsp;u_char&amp;nbsp;*ip_hdr_addr; //&amp;nbsp;IP头的首地址
  &lt;/p&gt;
  &lt;p&gt;
    const&amp;nbsp;u_char&amp;nbsp;*tcp_hdr_addr;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;tcp头的首地址
  &lt;/p&gt;
  &lt;p&gt;
    struct&amp;nbsp;tcphdr&amp;nbsp;*tcp_hdr;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;tcp头结构体
  &lt;/p&gt;
  &lt;p&gt;
    u_short&amp;nbsp;dst_port;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;目的端口
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    //&amp;nbsp;如果命令行指定网卡名
  &lt;/p&gt;
  &lt;p&gt;
    if&amp;nbsp;(argv[1])
  &lt;/p&gt;
  &lt;p&gt;
    dev&amp;nbsp;=&amp;nbsp;argv[1];&amp;nbsp;//就用指定的网卡
  &lt;/p&gt;
  &lt;p&gt;
    else
  &lt;/p&gt;
  &lt;p&gt;
    dev&amp;nbsp;=&amp;nbsp;&#34;eth0&#34;;&amp;nbsp;//否则用eth0
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    }
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;用pcap打开这个网卡
  &lt;/p&gt;
  &lt;p&gt;
    handle&amp;nbsp;=&amp;nbsp;pcap_open_live(dev,&amp;nbsp;BUFSIZ,&amp;nbsp;0,&amp;nbsp;1000,&amp;nbsp;errbuf);
  &lt;/p&gt;
  &lt;p&gt;
    if&amp;nbsp;(handle&amp;nbsp;==&amp;nbsp;NULL)&amp;nbsp;{&amp;nbsp;&amp;nbsp;//&amp;nbsp;打开网卡出错
  &lt;/p&gt;
  &lt;p&gt;
    fprintf(stderr,&amp;nbsp;&#34;Couldn&#39;t&amp;nbsp;open&amp;nbsp;device&amp;nbsp;%s:&amp;nbsp;%s\n&#34;,&amp;nbsp;dev,&amp;nbsp;errbuf);
  &lt;/p&gt;
  &lt;p&gt;
    return(2);
  &lt;/p&gt;
  &lt;p&gt;
    }
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;编译过滤文件
  &lt;/p&gt;
  &lt;p&gt;
    if&amp;nbsp;(pcap_compile(handle,&amp;nbsp;&amp;fp,&amp;nbsp;filter_exp,&amp;nbsp;0,&amp;nbsp;net)&amp;nbsp;==&amp;nbsp;-1)&amp;nbsp;{
  &lt;/p&gt;
  &lt;p&gt;
    fprintf(stderr,&amp;nbsp;&#34;Couldn&#39;t&amp;nbsp;parse&amp;nbsp;filter&amp;nbsp;%s:&amp;nbsp;%s\n&#34;,&amp;nbsp;filter_exp,&amp;nbsp;pcap_geterr(handle));
  &lt;/p&gt;
  &lt;p&gt;
    return(2);
  &lt;/p&gt;
  &lt;p&gt;
    }
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;设置过滤条件
  &lt;/p&gt;
  &lt;p&gt;
    if&amp;nbsp;(pcap_setfilter(handle,&amp;nbsp;&amp;fp)&amp;nbsp;==&amp;nbsp;-1)&amp;nbsp;{
  &lt;/p&gt;
  &lt;p&gt;
    fprintf(stderr,&amp;nbsp;&#34;Couldn&#39;t&amp;nbsp;install&amp;nbsp;filter&amp;nbsp;%s:&amp;nbsp;%s\n&#34;,&amp;nbsp;filter_exp,&amp;nbsp;pcap_geterr(handle));
  &lt;/p&gt;
  &lt;p&gt;
    return(2);
  &lt;/p&gt;
  &lt;p&gt;
    }
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;抓包
  &lt;/p&gt;
  &lt;p&gt;
    packet&amp;nbsp;=&amp;nbsp;pcap_next(handle,&amp;nbsp;&amp;header);
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    //&amp;nbsp;至此packet指向抓到的一个目标端口号是80的数据链路层的包
  &lt;/p&gt;
  &lt;p&gt;
    //&amp;nbsp;它的包结构是&amp;nbsp;14字节以太网包头&amp;nbsp;+&amp;nbsp;可变IPv4包头&amp;nbsp;+&amp;nbsp;TCP包头
  &lt;/p&gt;
  &lt;p&gt;
    ip_hdr_addr&amp;nbsp;=&amp;nbsp;(u_char*)(packet&amp;nbsp;+&amp;nbsp;sizeof(struct&amp;nbsp;ethernet_hdr));
  &lt;/p&gt;
  &lt;p&gt;
    src_ip.s_addr&amp;nbsp;=&amp;nbsp;((struct&amp;nbsp;iphdr*)ip_hdr_addr)-&gt;saddr;
  &lt;/p&gt;
  &lt;p&gt;
    dst_ip.s_addr&amp;nbsp;=&amp;nbsp;((struct&amp;nbsp;iphdr*)ip_hdr_addr)-&gt;daddr;
  &lt;/p&gt;
  &lt;p&gt;
    len_of_iphdr&amp;nbsp;=&amp;nbsp;((struct&amp;nbsp;iphdr*)ip_hdr_addr)-&gt;ihl&amp;nbsp;*&amp;nbsp;4;
  &lt;/p&gt;
  &lt;p&gt;
    tcp_hdr_addr&amp;nbsp;=&amp;nbsp;ip_hdr_addr&amp;nbsp;+&amp;nbsp;len_of_iphdr;
  &lt;/p&gt;
  &lt;p&gt;
    tcp_hdr&amp;nbsp;=&amp;nbsp;(struct&amp;nbsp;tcphdr*)tcp_hdr_addr;
  &lt;/p&gt;
  &lt;p&gt;
    dst_port&amp;nbsp;=&amp;nbsp;tcp_hdr-&gt;dest;
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    //&amp;nbsp;经过上面的各种指针偏移，下面打印源IP和目标IP和目标端口.
  &lt;/p&gt;
  &lt;p&gt;
    printf(&#34;src&amp;nbsp;addr&amp;nbsp;%s\n&#34;,&amp;nbsp;inet_ntoa(src_ip));
  &lt;/p&gt;
  &lt;p&gt;
    printf(&#34;dst&amp;nbsp;addr&amp;nbsp;%s\n&#34;,&amp;nbsp;inet_ntoa(dst_ip));
  &lt;/p&gt;
  &lt;p&gt;
    printf(&#34;dst_port&amp;nbsp;%d\n&#34;,&amp;nbsp;ntohs(dst_port));
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    /*&amp;nbsp;And&amp;nbsp;close&amp;nbsp;the&amp;nbsp;session&amp;nbsp;*/
  &lt;/p&gt;
  &lt;p&gt;
    pcap_close(handle);
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    return(0);
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;}
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    5.&amp;nbsp;总结
  &lt;/p&gt;
  &lt;p&gt;
    本文只是一个非常简单的介绍。如需要进阶学习，Stevens的网络编译有更详细地关于Raw&amp;nbsp;Socket的内容，研究NF_Queue技术则需要读源代码和收集散在社区各个角落的资料了，而讲libpcap有两篇很好的文章：
  &lt;/p&gt;
  &lt;p&gt;
    &#34;&lt;a href=&#34;http://recursos.aldabaknocking.com/libpcapHakin9LuisMartinGarcia.pdf&#34;&gt;Programming&amp;nbsp;with&amp;nbsp;Libpcap&amp;nbsp;&amp;ndash;&amp;nbsp;Sniffing&amp;nbsp;the&amp;nbsp;network&amp;nbsp;from&amp;nbsp;our&amp;nbsp;own&amp;nbsp;application&amp;nbsp;&lt;/a&gt;&#34;用Libpcap编程，在我们的程序中嗅探网络。非常漂亮的pdf文档。
  &lt;/p&gt;
  &lt;p&gt;
    &lt;a href=&#34;http://recursos.aldabaknocking.com/libpcapHakin9LuisMartinGarcia.pdf&#34;&gt;http://recursos.aldabaknocking.com/libpcapHakin9LuisMartinGarcia.pdf&lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;a href=&#34;http://yuba.stanford.edu/~casado/pcap/section1.html&#34;&gt;The&amp;nbsp;Sniffer&amp;rsquo;s&amp;nbsp;Guide&amp;nbsp;to&amp;nbsp;Raw&amp;nbsp;Traffic&lt;/a&gt;&amp;nbsp;嗅探器教程。斯坦福大学的Geek于大概2001年写的。
  &lt;/p&gt;
  &lt;p&gt;
    &lt;a href=&#34;http://yuba.stanford.edu/~casado/pcap/section1.html&#34;&gt;http://yuba.stanford.edu/~casado/pcap/section1.html&lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;
    copyright ykyi.net
  &lt;/p&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>traceroute failed.Specify protocal traceroute used manually to fix it.</title>
      <link>https://ykyi.net/?p=751/</link>
      <pubDate>Wed, 20 Jun 2012 14:37:16 +0000</pubDate>
      <guid>https://ykyi.net/?p=751/</guid>
      <description>&lt;p&gt;&lt;span style=&#34;font-family:lucida sans unicode,lucida grande,sans-serif;&#34;&gt;&lt;span style=&#34;font-size: 16px; &#34;&gt;Today, I ran the traceroute program on a machine running FreeBSD. It failed once and again.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-family:lucida sans unicode,lucida grande,sans-serif;&#34;&gt;&lt;span style=&#34;font-size: 16px; &#34;&gt;Traceroute complained:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-family:lucida sans unicode,lucida grande,sans-serif;&#34;&gt;&lt;span style=&#34;font-size: 16px; &#34;&gt;&lt;span style=&#34;color: rgb(51, 51, 51); line-height: 19px; text-align: left; &#34;&gt;traceroute: sendto: Permission denied.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&#34;text-align: left;&#34;&gt;
  &lt;span style=&#34;font-family:lucida sans unicode,lucida grande,sans-serif;&#34;&gt;&lt;span style=&#34;font-size: 16px; &#34;&gt;&lt;font color=&#34;#333333&#34;&gt;&lt;span style=&#34;line-height: 19px; &#34;&gt;So I tried to ping. Ping failed, too. I then checked out the configuration of the firewall, which actually denied the pass through of ICMP packet. So I set it to allow ICMP pacakges to pass through the firewall. Ping worked as I expected. But traceroute still failed.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>tcpdump基础教程</title>
      <link>https://ykyi.net/?p=45/</link>
      <pubDate>Sun, 31 Oct 2010 05:34:49 +0000</pubDate>
      <guid>https://ykyi.net/?p=45/</guid>
      <description>&lt;p&gt;英文原文出自： &lt;a href=&#34;http://danielmiessler.com/study/tcpdump/&#34;&gt;A tcpdump Tutorial and Primer&lt;/a&gt;&lt;br&gt;
翻译: ykyi.net&lt;/p&gt;
&lt;p&gt;Tcpdump是信息安全专业人士最重要的一个网络分析工具。对这个工具有一个深入的理解对于每一个喜欢透彻理解tcp/ip协议栈的人来话都是必须的。但很多人选择一个更高级别的工级，比如Ethereal Wireshark，但是我认为这是一个错误！&lt;/p&gt;
&lt;p&gt;不应该机械的反复记忆概念而应该做到真正的理解，因为对tcp/ip协议簇保持清醒的认知非常的重要。如果对该协议簇能够完全精通，那你调试网络的能力则能比同行们高出几个档次。但是，要学精神tcp/ip协议簇，只有不够的实践剖析它们才能做到。&lt;/p&gt;
&lt;p&gt;当你使用某种工具来显示网络中的原始流量信息时，人类，而不是机器，就要承担起分析这些流量的重任了。用这种方法就可以不断地加深对tcp/ip的理解。并且，用这种学习方法的时候，我在任何可能的情况下都强烈主张使用tcpdump而不是其它工具。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;选项&lt;/strong&gt;&lt;br&gt;
下面将列出一些用例子的选项，这样可以在你使用这个工具时对你有很大的帮助。这些选项很容易淡忘或与其它类型的滤镜(Filter,笔者认为这里的滤镜实际上指的是其它网络工具)混淆。比如, ethereal。所以，希望这篇文章可以作为一个参考文档，我就是这样使用它的。&lt;/p&gt;
&lt;p&gt;首先，我要先介绍几个我认为很方便的tcpdump的选项。第一个是 -n, 这样的话域名就不会被解析了，而是用数字IP的形式显示地址(译者注: 同netstat的-n是一样的喔)。第二个是 -X, 这样就会同时把包的内容以ASCII码和十六制的形式显示。最后一个是 -S, 它个选项会显示绝对序号而不是相对序号。因为当包被隐藏起来的话，你也不会看到奇怪的序号。请谨记，tcpdump较之其它工具的优势之一就是可以与包(packets)手工交互。&lt;/p&gt;
&lt;p&gt;值得注意的是，tcpdump默认只会从packet中取出前96个字节。如果你想要多一些的话，那就需要需要把 -s xxxx 加上。这里的xxxx是你确切想要抓取的总字节数。如果我使用这个选项的话，我通常会把这个数字设定为1514而得到所有的数据。下面是一个简短的列表列出我经常使用的选项。&lt;/p&gt;
&lt;p&gt;-i any: 监听所有的介面。这样你就知道是不是有流量产生。&lt;br&gt;
-n: 不要解决主机名，以IP数字形式显示主机。&lt;br&gt;
-nn: 不要解析主机名或端口名字。&lt;/p&gt;
&lt;p&gt;-A: 以ASCII字符显示包的数据。&lt;br&gt;
-X: 同时以十六进制和ASCII字符显示包的数据。&lt;br&gt;
-XX: 同-X,但也会显示 Ethernet头部。&lt;br&gt;
-v, -vv, -vvv: 详细，更详细，再详细些！ 冗余输出得到的包信息。&lt;br&gt;
-c: 抓取 x 个包后就停下。&lt;br&gt;
-S: 打印绝对序号。&lt;br&gt;
-e: 同时得到Ethernet头部。&lt;br&gt;
-q: 显示少一点协议信息。&lt;br&gt;
-E: 用提供的密钥解密 IPSEC 流量。&lt;br&gt;
-s: 设置显示前多少个字节的包内容（snaplength）。&lt;/p&gt;
&lt;p&gt;tcpdump 4.0的snaplength的长度从68字节改成了96字节，这样你就可以看到多些内容了。但仍然看不到所有的内容，指定 -s 1514 得到包的所有内容。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://ykyi.net&#34;&gt;http://ykyi.net&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;一些基本的应用&lt;/strong&gt;&lt;br&gt;
根据我要查看的不同流量，我使用不同的选项组合，如下:&lt;/p&gt;
&lt;p&gt;1.Basic communication // see the basics without many options&lt;br&gt;
tcpdump -nS&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
