<?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>Uncategorized on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/categories/uncategorized/</link>
    <description>Recent content in Uncategorized on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 15 Apr 2014 12:22:48 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/categories/uncategorized/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用Range Adaptor，废弃replace_copy_if之类的函数</title>
      <link>https://ykyi.net/?p=1242/</link>
      <pubDate>Tue, 15 Apr 2014 12:22:48 +0000</pubDate>
      <guid>https://ykyi.net/?p=1242/</guid>
      <description>&lt;p&gt;看看replace_copy_if的一个简单的例子：&lt;/p&gt;
&lt;p&gt;std::vector&lt;int&gt; vec;&lt;/p&gt;
&lt;p&gt;boost::replace_copy_if(rng, std::back_inserter(vec), pred, new_value);&lt;/p&gt;
&lt;p&gt;对于这种写法，如果使用Range Adaptor的话，则可以写成：&lt;/p&gt;
&lt;p&gt;std::vector&lt;int&gt; vec;&lt;/p&gt;
&lt;p&gt;boost::push_back(vec, rng | boost::adaptors::replaced_if(pred, new_value));&lt;/p&gt;
&lt;p&gt;第二种写法有什么好处呢，&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;更高效率。因为std::back_inserter有额外的内存分配开销。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;更灵活。因为第二种写法可以应用更多的适配器，比如： boost::push_back(vec, rng | boost::adaptors::replaced_if(pred, new_value) | boost::adaptors::reversed);&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;更安全。因为第二种写法没有用unbounded output iterator。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>抓包程序的一些分享</title>
      <link>https://ykyi.net/?p=1102/</link>
      <pubDate>Thu, 26 Dec 2013 02:13:56 +0000</pubDate>
      <guid>https://ykyi.net/?p=1102/</guid>
      <description>&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;昨晚同白总和adden提到抓包的问题。因为写过相关的代码，遇到过抓包的各种各样的坑，此文分享一些相关的经验。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;&lt;strong&gt;1. Linux cooked capture&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;在用tcpdump或wireshark看数据包时，有时会看到数据链路层的的包头称为Linux cooked capture。这不是一个真实的包头，当用tcpdump指定从所有网络介质 -i any 抓包时，所有抓到的包的数据链路层被换成了Linux cooked capture。在wireshark官方网站对Linux cooked capture的解释中: 这是一个在linux上被libpcap抓包库使用的“假协议”(pseudo-protocal)，当从“any”设备在抓包，或者本地的数据链路层包头无效时被使用。更多，见&lt;a href=&#34;http://wiki.wireshark.org/SLL&#34;&gt;&lt;a href=&#34;http://wiki.wireshark.org/SLL&#34;&gt;http://wiki.wireshark.org/SLL&lt;/a&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;&lt;strong&gt;2. IP over IP tunnel&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;wikipedia的示例图显示IP tunnel上的包的结构是：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;alignnone&#34; height=&#34;100&#34; src=&#34;http://upload.wikimedia.org/wikipedia/en/thumb/2/2d/IPTunnelDiagram_01-12-07.jpg/300px-IPTunnelDiagram_01-12-07.jpg&#34; width=&#34;300&#34; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;但实战中用libpcap库从我们的线上机的IP隧道抓包时，pcap_loop或pcap_dispatch或pcap_next函数返回的数据包只有Inner IP header + IP payload，没有Outer IP headr，也没链路层的头部。多么幸运啊！&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;&lt;strong&gt;3. 混乱的RAW_SOCKET，PF_PACKET协议族&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;这不是工业标准定义的神秘领域，非常之混乱，谨慎进入。如果要写这方面的socket，可供参考。个人经验，用linux原生的socket抓包时，socket()的三的参数如下组合时的神奇效果.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;     &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;        _recv_fd = socket(AF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;        从此socket中读所有的IP包，返回的IP包没有链路层包头,因为第二个参数是SOCK_DGRAM，链路层包头返回时被去掉。第三个参数指定的是IP包。奇怪的是，如果出站的IP包的目的地址不是本机，则出站的IP包不会被抓到。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;       &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;        _recv_fd = socket(AF_PACKET , SOCK_RAW , htons(ETH_P_IP));&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;        和上一个socket的区别是，这个会返回链路层包头。和上一个socket一样，同样只能装到部分出站的包。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;      &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;            _recv_fd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;        这行代码只可以读入站的包，抓不到出站的包。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size:14px;&#34;&gt;            _recv_fd = socket(AF_PACKET , SOCK_RAW , htons(ETH_P_ALL));&lt;/span&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CDT调试中的追踪点和断点有什么区别。</title>
      <link>https://ykyi.net/?p=1077/</link>
      <pubDate>Wed, 11 Dec 2013 02:31:13 +0000</pubDate>
      <guid>https://ykyi.net/?p=1077/</guid>
      <description>&lt;p style=&#34;margin: 0.4em 0px 10px; line-height: 24px; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: medium;&#34;&gt;
  追踪点（Tracepoint）被当成断点(breakpoint)的一种，但有两个不同点需要注意：
&lt;/p&gt;
&lt;p style=&#34;margin: 0.4em 0px 10px; line-height: 24px; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: medium;&#34;&gt;
  1. 当一个追踪点在一个调试会话中被创建时，它并不种入到二进制代码中，直到用户显式地开始追踪实验。这意味着，创建/修改/删除追踪点并不影响程序，直到追踪真正开始。
&lt;/p&gt;
&lt;p style=&#34;margin: 0.4em 0px 10px; line-height: 24px; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: medium;&#34;&gt;
  2. 简单的创建一个追踪点并不是非常有价值，因为它默认不会收集任何信息。重要的是，把操作(Actions)添加到Tracepoint，这样tracepoint被触发的时候，前面自定义的Action就大有用处了。
&lt;/p&gt;
&lt;p style=&#34;margin: 0.4em 0px 10px; line-height: 24px; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: medium;&#34;&gt;
  来自CDT官网的原文：
&lt;/p&gt;
&lt;p style=&#34;margin: 0.4em 0px 10px; line-height: 24px; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: medium;&#34;&gt;
  &lt;b&gt;Create Tracepoints&lt;/b&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>CPRP和CPT是什么意思，有什么区别</title>
      <link>https://ykyi.net/?p=1065/</link>
      <pubDate>Fri, 06 Dec 2013 07:52:33 +0000</pubDate>
      <guid>https://ykyi.net/?p=1065/</guid>
      <description>&lt;p&gt;CPRP是Cost Per rating Point的缩写， CPT是cost per thousand的缩写。&lt;/p&gt;
&lt;p&gt;举例来说，某一个电视节目的一个商业广告时间槽位(commercial time slot)的价格是$1000，这个电视节目的收视率是10%（program rating），那么CPRP就是$1000除以10，即$100。&lt;/p&gt;
&lt;p&gt;而CPT则是广告到达某一个特定人群的花费。&lt;/p&gt;
&lt;p&gt; &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;</description>
    </item>
    <item>
      <title>设置变量GIT_CURL_VERBOSE可以帮助调试git出错</title>
      <link>https://ykyi.net/?p=1055/</link>
      <pubDate>Wed, 27 Nov 2013 04:43:22 +0000</pubDate>
      <guid>https://ykyi.net/?p=1055/</guid>
      <description>&lt;p&gt;今天操作git的时候又出错了:&lt;/p&gt;
&lt;p&gt;error: Failed connect to github.com:8080; No route to host while accessing &lt;a href=&#34;https://github.com/zausiu/gryphon/info/refs&#34;&gt;https://github.com/zausiu/gryphon/info/refs&lt;/a&gt;&lt;br&gt;
fatal: HTTP request failed&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;之前用公司的http代理上git, &lt;/p&gt;
&lt;p&gt;#git config -l&lt;/p&gt;
&lt;p&gt;http.proxy=http://web-proxy.oa.com:8080&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;设置变量GIT_CURL_VERBOSE可以看到详细的出错情况：&lt;/p&gt;
&lt;p&gt;#export GIT_CURL_VERBOSE=1&lt;/p&gt;
&lt;p&gt;# git pull&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Couldn&amp;rsquo;t find host github.com in the .netrc file; using defaults&lt;/li&gt;
&lt;li&gt;About to connect() to proxy web-proxy.oa.com port 8080 (#0)&lt;/li&gt;
&lt;li&gt;  Trying 10.14.36.100…&lt;/li&gt;
&lt;li&gt;0x23d67b0 is at send pipe head!&lt;/li&gt;
&lt;li&gt;STATE: CONNECT =&amp;gt; WAITCONNECT handle 0x23df5f0; (connection #0) &lt;/li&gt;
&lt;li&gt;No route to host&lt;/li&gt;
&lt;li&gt;Failed connect to github.com:8080; No route to host&lt;/li&gt;
&lt;li&gt;Closing connection #0&lt;/li&gt;
&lt;li&gt;Couldn&amp;rsquo;t find host github.com in the .netrc file; using defaults&lt;/li&gt;
&lt;li&gt;About to connect() to proxy web-proxy.oa.com port 8080 (#0)&lt;/li&gt;
&lt;li&gt;  Trying 10.14.36.100…&lt;/li&gt;
&lt;li&gt;0x23d67b0 is at send pipe head!&lt;/li&gt;
&lt;li&gt;STATE: CONNECT =&amp;gt; WAITCONNECT handle 0x23df5f0; (connection #0) &lt;/li&gt;
&lt;li&gt;No route to host&lt;/li&gt;
&lt;li&gt;Failed connect to github.com:8080; No route to host&lt;/li&gt;
&lt;li&gt;Closing connection #0&lt;br&gt;
error: Failed connect to github.com:8080; No route to host while accessing &lt;a href=&#34;https://github.com/zausiu/gryphon/info/refs&#34;&gt;https://github.com/zausiu/gryphon/info/refs&lt;/a&gt;&lt;br&gt;
fatal: HTTP request failed&lt;/li&gt;
&lt;/ul&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;</description>
    </item>
    <item>
      <title>用线上机测试tcpcopy基本通过。支持旧模式，Advanced模式失败</title>
      <link>https://ykyi.net/?p=999/</link>
      <pubDate>Mon, 09 Sep 2013 01:54:06 +0000</pubDate>
      <guid>https://ykyi.net/?p=999/</guid>
      <description>&lt;p class=&#34;p0&#34;&gt;
  &lt;b&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;测试结果介绍：&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;在编译期配置成使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;NFQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;模式，用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;Raw Socket&lt;/span&gt;&lt;span style=&#34;font-family:宋体;&lt;br /&gt;&lt;br /&gt;
color:blue&#34;&gt;抓包。线上机的流量被成功复制并导向测试机。经改动的&lt;span lang=&#34;EN-US&#34;&gt;tcpd&lt;/span&gt;初期工作正常。&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;改动版的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpd(&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;实际上是一个&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;echo&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;服务器&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。测试机上的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpd&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;把收到的报文被打印到日志文件。但日志文件到&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;6M&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;大小的时候，就停止打印。目前还没有查到原因，可能是改动后的&lt;span lang=&#34;EN-US&#34;&gt;tcpd&lt;/span&gt;的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Bug&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。此时，&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpdump&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;仍然抓到大量从线上机复制来的真实流量到达测试机。&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;应该是工作正常的。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体;color:blue&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;被编译成使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;抓包时&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:red&#34;&gt;不能&lt;/span&gt;&lt;span style=&#34;font-family:宋体;&lt;br /&gt;&lt;br /&gt;
color:blue&#34;&gt;在线上机上正常工作。&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;tcpdump&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;没有抓到预期从线上机复制到测试机的报文。原因是：线上机&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;10.130.68.100&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;上的真实流量从网络接口&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunl0:0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;进入，从网络接口&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;eth1&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;发出。分析&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpd&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;的日志发现，&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpd&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;只拿到&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunl0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IP&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;，没有发现&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunl0:0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IP&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。需要了解&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IP&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;隧道，和&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;库的相关知识，有可能解决这个问题。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;编译成使用&lt;span lang=&#34;EN-US&#34;&gt;Raw Socket&lt;/span&gt;抓包，和&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;Advanced&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;模式时，&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;启动失败，错误日志显示&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;Advanced&lt;/span&gt;&lt;span style=&#34;font-family:宋体;&lt;br /&gt;&lt;br /&gt;
color:blue&#34;&gt;模式只能使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体;color:blue&#34;&gt;库抓包。&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;因此，只有在解决&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;正确识别&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunl0:0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;网络接口后，才能在线上机上运行&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;b&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;预备知识：&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;Tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;可以编译成用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;抓包或者使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Raw Socket&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;抓包。&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;库是&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpdump&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;使用的抓包库，&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Raw Socket&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;是操作系统内建的功能。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;官方文档建议用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;抓包，以获得更高性能和较低丢包率。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;Tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;在编译期指定工作模式。&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;目前有两种工作模式，一种使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IPQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;技术或者&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;技术。&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;技术是用来替代&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IPQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;技术的。我们目前使用的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tlinux&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;，内建了&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;内核模块，没有开启&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IPQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;模块。因为&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;是内建的即&lt;span lang=&#34;EN-US&#34;&gt;CONF_XXXXXX = y&lt;/span&gt;，而不是编译成模块，即&lt;span lang=&#34;EN-US&#34;&gt;CONF_XXXXX = m, &lt;/span&gt;所以我们在环境中不需要使用&lt;span lang=&#34;EN-US&#34;&gt;modprobe &lt;/span&gt;加载&lt;span lang=&#34;EN-US&#34;&gt;IPQueue&lt;/span&gt;或者&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;模块。忽略官方文档中提到的&lt;span lang=&#34;EN-US&#34;&gt;modprobe ip_queue&lt;/span&gt;。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;b&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;测试步骤：&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;使用&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;模式：&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;线上机：&lt;span lang=&#34;EN-US&#34;&gt;10.130.68.100&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;编译&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;时指定使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;NFQueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。&lt;span style=&#34;color:blue&#34;&gt;不要指定 &lt;/span&gt;&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;color:blue&#34;&gt;&amp;#8211;enable-pcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;，则默认使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;raw socket&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;抓包。用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;pcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;抓包时识别不到网络接口&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunl0:0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;，而&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunl0:0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;是真实流量的入口。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;# ./configure &amp;#8211;enable-nfqueue &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;#./make&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;生成的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;在 &lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;src/tcpcopy &lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;目录下。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;运行&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;命令，把流量复制到测试机：&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;# ./tcpcopy -x 80-10.213.243.156 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;测试机：&lt;span lang=&#34;EN-US&#34;&gt;10.213.243.156&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;编译&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tcpcopy&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;时同样指定&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;&amp;#8211;enable-nfqueue&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;，不要指定&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;&amp;#8211;enable-pcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。然后运行&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;intercept&lt;/span&gt;&lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;# ./intercept&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;使用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Advanced&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;模式：&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span style=&#34;font-family:宋体&#34;&gt;因为暂时未能解决用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;libpcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;识别到网络设备&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;tunel0:0&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;的问题，实际上&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Advanced&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;模式暂时不能工作。根据以前的使用经验，用&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;Advanced&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;模式时需要注意两点：&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;1. &lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;在&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;./configure&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;时指定 &lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;&amp;#8211;enable-advaned &lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;和 &lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;&amp;#8211;enable-pcap&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;2. Advanced&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;模式需要两台测试机，需要设成一条路由把复制后的真实流量导向测试机。需要更改默认路由：删掉当前的默认路由，新的默认路由从正确的网卡指向测试机&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;的&lt;/span&gt;&lt;span lang=&#34;EN-US&#34;&gt;IP&lt;/span&gt;&lt;span style=&#34;font-family:宋体&#34;&gt;。&lt;span lang=&#34;EN-US&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;# route del default&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;# route add default gw 10.213.243.156 dev eth1&lt;/span&gt;
&lt;/p&gt;
&lt;p class=&#34;p0&#34;&gt;
  &lt;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&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;span lang=&#34;EN-US&#34; style=&#34;font-family:宋体&#34;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
