神探tcpdump第一招

2023-10-15 13:10
文章标签 tcpdump 神探 第一招

本文主要是介绍神探tcpdump第一招,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    应 @GamerH2o 博友在微博上提的要求,tcpdump专题会写成一个小型系列文章,力求每篇小文中突出重点,讲解清晰,避免长篇累牍,大家必然昏昏欲睡了。

    其实tcpdump就好像一个神探,它有着夜视的绝技,在毫无光亮的环境中,也可以看到所有的东西。(好像在编美剧hero一般,哈哈)

    在介绍tcpdump之前,要和你确认好几个关键前提,否则的话,往后的内容您看起来会非常困难。

     1 了解和使用过linux

     2 掌握网络七层协议及其作用

     3 熟悉各层协议头,重点是以太网/IP/TCP/UDP

     4 了解交换机、路由器所对应的协议层,并知道两者的异同点。

    如果你有些忘记了,那么强烈建议你翻出《计算机网络》教材,先好好回忆一下,然后再进入到下面的内容…

    

     ==

    正文:

    通俗的说,tcpdump是一个抓包工具,用于抓取互联网上传输的数据包。

     形象的说,tcpdump就好比是国家海关,驻扎在出入境的咽喉要道,凡是要入境和出境的集装箱,海关人员总要打开箱子,看看里面都装了点啥。

     学术的说,tcpdump是一种嗅探器(sniffer),利用以太网的特性,通过将网卡适配器(NIC)置于混杂模式(promiscuous)来获取传输在网络中的信息包。

    【抓人生中的第一个包】

    要用tcpdump抓包,请记住,一定要切换到root账户下,因为只有root才有权限将网卡变更为“混杂模式”。

     然后呢,就是用ifconfig的方法查看好你的服务器的网卡名称。(我的叫做eth0,一般都是这个名字)

    # tcpdump -i eth0 -nn -X ‘port 53′ -c 1

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
23:58:04.688155 IP 116.255.245.206.47172 > 61.139.2.69.53: 15352+ A? www.baidu.com. (31)
0x0000: 4500 003b d596 0000 4011 fa7d 74ff f5ce E..;....@..}t...
0x0010: 3d8b 0245 b844 0035 0027 a48f 3bf8 0100 =..E.D.5.\'..;...
0x0020: 0001 0000 0000 0000 0377 7777 0562 6169 .........www.bai
0x0030: 6475 0363 6f6d 0000 0100 01 du.com.....
1 packets captured
1 packets received by filter
0 packets dropped by kernel

    在此,我重点解释下这个命令:

    -i选项:

     是interface的含义,是指我们有义务告诉tcpdump希望他去监听哪一个网卡。这在我们一台服务器有多块网卡时很有必要。

    -nn选项:

     意思是说当tcpdump遇到协议号或端口号时,不要将这些号码转换成对应的协议名称或端口名称。比如,众所周知21端口是FTP端口,我们希望显示21,而非tcpdump自作聪明的将它显示成FTP。

    -X选项:

     告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。

    ‘port 53′:

     这是告诉tcpdump不要看到啥就显示啥。我们只关心源端口或目的端口是53的数据包,其他的数据包别给我显示出来。

    -c选项:

     是Count的含义,这设置了我们希望tcpdump帮我们抓几个包。我设置的是1,所以tcpdump不会帮我再多抓哪怕一个包回来。

    【未完待续】

    从混混乱乱的输出中,大家一定隐约的能看到www.baidu.com,是的,我抓到的这个包,其实是DNS解析的第一个包,也就是发出解析请求的包。至于tcpdump输出的内容到底是什么含义,会在后面娓娓道来。敬请期待。

转载于:https://my.oschina.net/leejun2005/blog/77469

这篇关于神探tcpdump第一招的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217926

相关文章

网络故障排查和tcpdump抓包

网络故障排查: ping一台服务器不通,你如何排查 检查本机ip地址设置  网关和dns服务器是否设置正确 或者ip地址冲突能否上网 看路由器是否有问题 ping服务器是否运行服务器禁止ping   防火墙设置 iptables -A INPUT -P ICMP -j DROPiptables -D INPUT -P ICMP -j DROP用户不能访问服务器 怎么排查 检查用户网络连接检查服

Linux - Tcpdump命令

一、说明    是一个用于抓取网络数据包并输出的工具,命令格式如下: tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ][ -C file_size ] [ -F expr_file ][ -i interface ] [ -m module ] [ -M secret ][ -r read_file ] [ -s snaplen

通过GRE封装前的IP地址tcpdump抓包

GRE封装IP层数据后导致抓包抓的是GRE的包,直接抓包会很大,所以希望通过里层的IP来抓包。 如下的测试数据包,最外层IP对:172.27.1.66-66.59.109.137,封装了66.59.111.190-172.28.2.3的数据包。此时我们只想抓取66.59.111.190-172.28.2.3这个相关的数据包。 通过对IP层数据的偏移位置来直接匹配数据 找到IP层开始的位置

tcpdump抓取tcp的三次握手

tcpdump抓取tcp的三次握手 先要打开两个终端,打开root权限 输入 telnet www.baidu.com 80 查询一下IP号,然后输入ctrl+] 以及quit退出 administrator@ubuntu:~$ sudo su[sudo] password for administrator: root@ubuntu:/home/administrator#

tcpdump 命令详解

1、抓取回环网口的包:tcpdump -i lo 2、防止包截断:tcpdump -s0 3、以数字显示主机及端口:tcpdump -n 关键字说明  第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是

linux命令详解--tcpdump

http://www.tuicool.com/articles/26nmqy

linux 命令之tcpdump

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句来删选去掉无用的信息。 tcpdump选项说明: -A 以ASCII格式打印出所有分组,并将链路层的头最小化-c 在收到指定的数量的分组后,tcpdump就会停止-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参

使用adb将tcpdump的流量导到wireshark

搭建环境 1、下载安 装adb 如果之前电脑里有装Android SDK,那么在 Android SDK 的 Tools 里面有 adb 工具, 将adb配到环境变量里 2、下载安装windows 端 netcat 工具 安装好后配到环境变量里 3、下载安装android 端 netcat 工具(手机要Root) 可以下载 Bu

Linux网络命令——tcpdump

tcpdump是Linux下的一个网络数据采集分析工具,也就是常说的抓包工具 tcpdump 核心参数 tcpdump [option] [proto] [dir] [type] 例如:$ tcpdump -i eth0 -nn -s0 -v port 80 option 可选参数: -i : 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该

tcpdump 命令对容器内的网络请求抓包的方法

记录一种在不进入容器的情况下对容器进行抓包的方法。 方法介绍 简单来说就是找到容器所用的网卡,然后在 host 机器上对该网卡进行抓包就可以了 :joy 操作示例 找到这个容器使用的网卡: $ PID=$(docker inspect --format {{.State.Pid}} test2)$ nsenter -n -t $PID ip addr1: lo: <LOOPBACK,U