<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践Ok]tcpdump的源码包安装方法,及通过tcpdump抓取HTTP包的方法,经常会用到的实用操作。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Fri, 31 May 2013 02:28:15 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：<br/> 外包把代码放到我们的测试机上，有可能出现这样那样的调用问题，尽管前面说过要注意host配置的问题并记录，但是往往出现在上到测试机时，忘记了，于是用下tcpdump来抓包，可以实现有效的对其跨系统的接口进行跟踪，并找到问题之所在。<br/>零：使用，方法一：<br/>vi /root/.bashrc&nbsp;&nbsp;<br/><textarea name="code" class="C" rows="15" cols="100">
alias tcpdumphttp=&#039;echo /usr/local/sbin/tcpdump -i any -p -s 0 -w /tmp/capture.pcap;/usr/local/sbin/tcpdump -i any -p -s 0 -w /tmp/capture.pcap&#039;
alias sztcpdumphttp=&#039;echo capture.pcap;sz /tmp/capture.pcap&#039;
</textarea><br/>生效：<br/>source /root/.bashrc<br/>方法二（优点这个导出只是传的参数以&amp;符号分割，而返回则全是body里的内容，相当的适合用作接口调试参数，用curl来进行组装访问。）：<br/><textarea name="code" class="C" rows="15" cols="100">
alias tcpdumphttp2=&#039;echo /usr/local/sbin/tcpdump tcp -i eth0&nbsp;&nbsp;-t -s 0&nbsp;&nbsp;and&nbsp;&nbsp;port 80 -w /tmp/capture.cap;/usr/local/sbin/tcpdump tcp -i eth0&nbsp;&nbsp;-t -s 0&nbsp;&nbsp;and&nbsp;&nbsp;port 80 -w /tmp/capture.cap&#039;
</textarea><br/>参考其优点细说在：http://jackxiang.com/post/7344/<br/>特别说明：<br/>tcpdump命令默认捕获包总长度是96字节，如图所示，我们只要在抓包命令里加一个参数 -s 0 即可捕获完整数据的数据包。<br/>/usr/local/sbin/tcpdump -i any -p -s 0 -w /tmp/capture.pcap<br/><br/>一：安装<br/>官网：http://www.tcpdump.org<br/>下载两个包，注意配套，我的是：<br/>http://www.tcpdump.org/release/libpcap-1.4.0.tar.gz<br/>http://www.tcpdump.org/release/tcpdump-4.3.0.tar.gz<br/>Add Time:2014-01-27,上面旧版本没问题，新的有问题：<br/>wget http://www.tcpdump.org/release/tcpdump-4.5.1.tar.gz<br/>wget http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz<br/>1 下载了libpcap-1.5.2.tar.gz。<br/>2 tar -vxf libpcap-1.5.2.tar.gz<br/>3 ./configure<br/>4 make 发生错误。<br/>1）安装：libpcap<br/>cd /data/codesdev/libpcap/libpcap-1.6.1<br/>./configure&amp;&amp;make &amp;&amp; make install <br/>理论上一次能过，但是往往会出现新的问题，如下：<br/>[root@master libpcap-1.5.2]# make<br/>gcc -fpic -I.&nbsp;&nbsp;-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include&nbsp;&nbsp; -DHAVE_CONFIG_H&nbsp;&nbsp;-D_U_=&quot;__attribute__((unused))&quot; -g -O2 -c ./pcap-dbus.c<br/>./pcap-dbus.c: In function ‘dbus_write’:<br/>./pcap-dbus.c:111: 错误：‘DBUS_ERROR_INIT’ 未声明 (在此函数内第一次使用)<br/>./pcap-dbus.c:111: 错误：(即使在一个函数内多次出现，每个未声明的标识符在其<br/>./pcap-dbus.c:111: 错误：所在的函数内只报告一次。)<br/>./pcap-dbus.c: In function ‘dbus_activate’:<br/>./pcap-dbus.c:165: 错误：‘DBUS_ERROR_INIT’ 未声明 (在此函数内第一次使用)<br/>make: *** [pcap-dbus.o] 错误 1<br/>按装dbus:<br/>http://www.freedesktop.org/wiki/Software/dbus/ <br/>问题答案未实践来自：http://bbs.csdn.net/topics/390693013<br/>######################我的情况如下######################<br/>cc -fpic -I.&nbsp;&nbsp;-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include&nbsp;&nbsp; -DHAVE_CONFIG_H&nbsp;&nbsp;-D_U_=&quot;__attribute__((unused))&quot; -g -O2 -c ./pcap-linux.c<br/>gcc -fpic -I.&nbsp;&nbsp;-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include&nbsp;&nbsp; -DHAVE_CONFIG_H&nbsp;&nbsp;-D_U_=&quot;__attribute__((unused))&quot; -g -O2 -c ./pcap-usb-linux.c<br/>gcc -fpic -I.&nbsp;&nbsp;-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include&nbsp;&nbsp; -DHAVE_CONFIG_H&nbsp;&nbsp;-D_U_=&quot;__attribute__((unused))&quot; -g -O2 -c ./pcap-dbus.c<br/>./pcap-dbus.c: In function ‘dbus_write’:<br/>./pcap-dbus.c:111: error: ‘DBUS_ERROR_INIT’ undeclared (first use in this function)<br/>./pcap-dbus.c:111: error: (Each undeclared identifier is reported only once<br/>./pcap-dbus.c:111: error: for each function it appears in.)<br/>./pcap-dbus.c: In function ‘dbus_activate’:<br/>./pcap-dbus.c:165: error: ‘DBUS_ERROR_INIT’ undeclared (first use in this function)<br/>make: *** [pcap-dbus.o] Error 1<br/>#########################################################################<br/>http://dbus.freedesktop.org/releases/dbus/<br/><br/>2)安装tcpdump：<br/>cd /data/codesdev/libpcap/tcpdump-4.6.1<br/>./configure&amp;&amp;make &amp;&amp; make install<br/><br/>在centos6.4上安装后如下：<br/>tcpdump --version<br/>tcpdump version 4.6.1<br/>libpcap version 1.6.1<br/>OpenSSL 1.0.1e-fips 11 Feb 2013<br/><br/>二：通过tcpdump抓取HTTP包的方法，实践Ok：<br/>tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854<br/>0x4745 为&quot;GET&quot;前两个字母&quot;GE&quot;<br/>0x4854 为&quot;HTTP&quot;前两个字母&quot;HT&quot;<br/>来自：http://zhumeng8337797.blog.163.com/blog/static/100768914201291110503529/<br/>经过实践是可以的，特别是对接口的调试这一块很是有用，特记录如下：<br/><textarea name="code" class="php" rows="15" cols="100">
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 -w /tmp/capture.pcap 
</textarea><br/>解释：<br/>0x4745 为&quot;GET&quot;前两个字母&quot;GE&quot;<br/>0x4854 为&quot;HTTP&quot;前两个字母&quot;HT&quot;<br/>实践如下：<br/>[root@localhost ~]# tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854&nbsp;&nbsp;-w /tmp/capture.pcap <br/>tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes<br/>8 packets captured<br/>8 packets received by filter<br/>0 packets dropped by kernel<br/>[root@localhost ~]# sz /tmp/capture.pcap <br/>[/codes]<br/><br/><br/>三：通过网卡eth1来监听端口80发出去的host包到192.168.109.8的报文：<br/>TcpDump位置： /usr/local/sbin/tcpdump<br/>&nbsp;&nbsp;<textarea name="code" class="php" rows="15" cols="100">
tcpdump -i eth1 port 80 and dst host &quot;192.168.109.8&quot; 
 </textarea><br/> (0)最常用的：<br/><textarea name="code" class="php" rows="15" cols="100">
&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/sbin/tcpdump -i any -p -s 0 -w /tmp/capture.pcap&nbsp;&nbsp;
</textarea><br/>（1）捕获队列的Http请求，不知道是哪个网卡于是得：-i any,根据端口和IP进行捕获：<br/> curl &quot;http://198.168.109.*:1218?charset=utf8&amp;name=playRecord&amp;opt=get&quot;,也就是目标是：198.168.109.*<br/>生成如下捕获的tcpdump命令,经测试捕获是Ok的且可以用wireshark打开并查看到http的包：<br/><textarea name="code" class="php" rows="15" cols="100">
/usr/local/sbin/tcpdump -i any&nbsp;&nbsp;port 80 and dst host &quot;192.168.109.*&quot; -w /tmp/capture.pcap 
</textarea><br/>如监控队列：<br/><textarea name="code" class="php" rows="15" cols="100">tcpdump -i any&nbsp;&nbsp;port 1219 and dst host &quot;192.168.109.7&quot; -w /tmp/capture.pcap</textarea><br/>（2）加上源地址IP进行捕获：<br/><textarea name="code" class="php" rows="15" cols="100">
tcpdump -i any -p -s 0 port 80 and dst host &quot;192.168.109.*&quot; and src host &quot;10.70.32.**&quot; -w /tmp/capture.pcap
</textarea><br/>所有包都截获后sz下来，并用Windows下的wireshark界面进行过滤查看http的包：<br/><textarea name="code" class="php" rows="15" cols="100">
 /usr/local/sbin/tcpdump -i any -p -s 0 -w /tmp/capture.pcap
</textarea><br/><br/>实践完全Ok，用wireshark能看到，并能导出：<br/><textarea name="code" class="php" rows="15" cols="100">
[root@localhost ~]# tcpdump -i any -p -s 0 -w /tmp/capture.pcap&nbsp;&nbsp;
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
2623 packets captured
4539 packets received by filter
4 packets dropped by kernel
[root@localhost ~]# sz /tmp/capture.pcap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
rz
 zmodem trl+C ȡ

&nbsp;&nbsp;100%&nbsp;&nbsp;&nbsp;&nbsp; 519 KB&nbsp;&nbsp;519 KB/s 00:00:01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 Errors
</textarea><br/>wireshark界面使用备案Url:http://www.jackxiang.com/post/6262/<br/><br/>四：抓取发往某个指定IP的http get包数据指定文件进行输出package，这个也是下载到Windows下用wireshark界面过滤查看，实践用wireshark能看到:<br/><textarea name="code" class="php" rows="15" cols="100">
tcpdump -XvvennSs 0 -i eth0 port 80 and dst host &quot;192.168.109.8&quot; and tcp[20:2]=0x4745 or tcp[20:2]=0x4854&nbsp;&nbsp;-w /tmp/capture.pcap
</textarea><br/><br/>实践如下：<br/>[root@localhost ~]# tcpdump -XvvennSs 0 -i eth0 port 80 and dst host &quot;192.168.109.8&quot; and tcp[20:2]=0x4745 or tcp[20:2]=0x4854&nbsp;&nbsp;-w /tmp/capture.pcap <br/>tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes<br/>Got 4<br/><br/>实践用wireshark打开能看到这些ip的http，实践Ok。<br/><br/>五：如何添加编译好的Tcpdump到到环境变量PATH中的方法：<br/>http://www.jackxiang.com/post/1792/<br/><br/><br/>Tcpdump的安装 <br/><br/>在一些Linux发行版中，Tcpdump通常作为标准的软件包被默认安装，执行“tcpdump”命令能够确定是否已安装了Tcpdump。假如系统中还没有安装Tcpdump<br/><br/>1、下载地址<br/><br/>可到“http://www.tcpdump.org”下载最新的Tcpdump源码包。<br/><br/>注意：<br/><br/>因tcpdump的运行需要pcap的支持，所以最好先行安装pcap软件包，另外还要注意软件的版本问题，建议按照网站上匹配的软件包tcpdump和pcap一同下载。<br/><br/>前期在测试时我使用的yum 安装的pcap包（版本0.9.*），然后在网上下载了tcpdump（版本为4.3.0)，在后期编译安装tcpdump时总是出错！！！后来我yum remove pcap&nbsp;&nbsp;后重新使用源码包安装，一次成功！<br/><br/><br/>2、下面以tcpdump-4.3.0.tar.gz&nbsp;&nbsp;&nbsp;&nbsp;libpcap-1.3.0.tar.gz为例，讲述如何安装Tcpdump<br/><br/>此处使用的操作系统是 CentOS release 5.5 (Final)<br/><br/>在编译Tcpdump之前，应先确定pcap库(libpcap)已安装完毕。这个库是编译Tcpdump时所必需的。<br/><br/>安装过程非常简单如下示：<br/><br/> tar -zxvf libpcap-1.3.0.tar.gz <br/><br/>&nbsp;&nbsp;cd libpcap-1.3.0<br/><br/> ./configure<br/><br/> make <br/><br/> make install<br/><br/>该库已安装完毕，下面执行下面的命令来编译并安装Tcpdump： <br/><br/>tar -zxvf tcpdump-4.3.0.tar.gz <br/><br/>cd tcpdump-4.3.0<br/><br/> ./configure<br/><br/> make<br/>make install<br/><br/>来自：http://blog.itechol.com/space-33-do-blog-id-5780.html<br/>64位的centos出现：<br/>checking for capable lex... insufficient<br/>configure: error: Your operating system&#039;s lex is insufficient to compile<br/> libpcap.&nbsp;&nbsp;flex is a lex replacement that has many advantages, including<br/> being able to compile libpcap.&nbsp;&nbsp;For more information, see<br/> http://www.gnu.org/software/flex/flex.html .<br/><br/>yum install flex<br/>...<br/>Total download size: 286 k<br/>Installed size: 724 k<br/>Is this ok [y/N]: <br/>Running Transaction<br/>&nbsp;&nbsp;Installing : flex-2.5.35-8.el6.x86_64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/1 <br/>&nbsp;&nbsp;Verifying&nbsp;&nbsp;: flex-2.5.35-8.el6.x86_64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/1 <br/><br/>make<br/>可能会遇到yacc错误：<br/>yacc -d ./parse.y&lt;br&gt;make: yacc: Command not found&lt;br&gt;make: *** [parse.c] Error 127<br/>解决方法：<br/>yum install byacc <br/>debian:<br/>sudo apt-get install -y byacc<br/>以上来自：<br/>http://www.cnblogs.com/lynch_world/archive/2011/08/31/2160678.html<br/><br/>后记，发现安装的tcpdump不可用（因登录时shell用户不对造成默认Tcpdump的PATH不是/usr/sbin/，而是： /usr/local/sbin/，得用~/.bash_profile 里去掉加的/usr/local/sbin/：sudo su - 会默认到/usr/sbin/就行了。）：<br/><textarea name="code" class="C" rows="15" cols="100">
PATH=$PATH:$HOME/bin:/usr/sbin:/usr/sbin:/sbin
export PATH
</textarea><br/><br/>[root@localhost ~]# tcpdump -i any -p -s 0 -w /tmp/capture.pcap<br/>tcpdump: error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory<br/>[root@localhost ~]# whoami<br/>发现没有这个，应该有两个tcpdump：<br/>[root@localhost ~]# ldd /usr/sbin/tcpdump <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libcrypto.so.6 =&gt; /lib64/libcrypto.so.6 (0x0000003bd9000000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libc.so.6 =&gt; /lib64/libc.so.6 (0x0000003bd4800000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libdl.so.2 =&gt; /lib64/libdl.so.2 (0x0000003bd4c00000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libz.so.1 =&gt; /usr/lib64/libz.so.1 (0x0000003bd5c00000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/lib64/ld-linux-x86-64.so.2 (0x0000003bd4400000)<br/><br/>经检查，果然有两个，给那个不行的摘掉：<br/>whereis tcpdump<br/>tcpdump: /usr/sbin/tcpdump /usr/local/sbin/tcpdump<br/><br/>做下软链接：<br/>cd /usr/local/sbin/<br/>mv tcpdump tcpdump.libpcap.so.1.erro<br/>ln -s /usr/sbin/tcpdump&nbsp;&nbsp;tcpdump<br/>tcpdump -&gt; /usr/sbin/tcpdump
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践Ok]tcpdump的源码包安装方法,及通过tcpdump抓取HTTP包的方法,经常会用到的实用操作。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>