Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tools-tcp

tools-tcp

作者头像
Heeler-Deer
发布于 2023-02-22 06:27:22
发布于 2023-02-22 06:27:22
47900
代码可运行
举报
文章被收录于专栏:HD-学习笔记HD-学习笔记
运行总次数:0
代码可运行

tools-tcp/ip

之前阅读掘金小册时一直没实战,这里就补一下

tcpdump

参考网站: 博客园

默认情况下tcpdump抓第一个网卡上的数据包

监听特定网卡使用-i参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump -i wlo1

监听特定本机和特定ip的通信使用host参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump host 111.111.11.11

监听来源/目标地址通信:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump src host 111.111.11.11tcpdump dst host 111.111.11.11

监听特定端口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump port 3000

可以指定tcp/udp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump tcp

监听特定主机之间的通信(需要有权限)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump ip host 210.27.48.1 and 210.27.48.2

稍微详细点的例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 (2)-i eth1 : 只抓经过接口eth1的包 (3)-t : 不显示时间戳 (4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包 (5)-c 100 : 只抓取100个数据包 (6)dst port ! 22 : 不抓取目标端口是22的数据包 (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24 (8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

strace

strace用来跟踪进程执行时的系统调用以及所接收的信号,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
strace cat /dev/null execve("/usr/bin/cat", ["cat", "/dev/null"], 0x7ffc3650b2a8 /* 80 vars */) = 0brk(NULL)                               = 0x560885cd5000arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd61de71d0) = -1 EINVAL (无效的参数)mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8cb41e5000access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (没有那个文件或目录)openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=132945, ...}, AT_EMPTY_PATH) = 0mmap(NULL, 132945, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8cb41c4000close(3)                                = 0

每一行都是一个系统调用

strace的参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. -F 尝试跟踪vfork调用.-f时,vfork不被跟踪. -r 打印出相对时间关于,,每一个系统调用. -t 在输出中的每一行前加上时间信息.  -e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. -e trace=file 只跟踪有关文件操作的系统调用. -e trace=process 只跟踪有关进程控制的系统调用. -e trace=network 跟踪与网络有关的所有系统调用. -e strace=signal 跟踪所有与系统信号有关的 系统调用 -e trace=ipc 跟踪所有与进程通讯有关的系统调用 -o filename 将strace的输出写入文件filename -p pid 跟踪指定的进程pid. -u username 以username 的UIDGID执行被跟踪的命令

这个佬的博客写的很详细,案例也不错,建议看看。

strace给我的感觉是如果不加参数过滤一些信息,给出的信息实在太多了。

如在我的电脑上strace -o 1.txt pkill goldendict,strace就给出了3287行的信息。。。如果加上参数-e trace=process,那么就只有4行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
execve("/usr/bin/pkill", ["pkill", "goldendict"], 0x7ffc17024708 /* 83 vars */) = 0kill(340891, SIGTERM)                   = 0exit_group(0)                           = ?+++ exited with 0 +++

我后来又试了试了,sudo strace -e trace=close -f -d -uheeler -o 1.txt pkill goldendict,发现kill这个goldendict的调用的close是真多 😃

packetdrill

安装:github

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd gtests/net/packetdrillsudo apt-get install -y bison flex

为避免 offload 机制对包大小的影响,修改 netdev.c 注释掉 set_device_offload_flags 函数所有内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./configure

修改 Makefile,去掉第一行的末尾的 -static 执行 make 命令编译 可以在目录下尝试packetdrill是否正常生成 加入环境变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo vim /etc/profile

加入你的路径即可。之后任意打开一个命令行。packetdrill查看是否成功 由于packetdrill需要sudo权限,因此需要更改/.zshrc (我用的zsh解释器),在里面加入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo vim /etc/profile

之后保存, source /.zshrc 即可

packetdrill实际上方便了程序员以确定的时间安排系统调用。他可以执行系统调用函数、把数据包注入到内核协议栈,并且支持py、shell,

来看一个张师傅给出的简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0   socket(..., SOCK_STREAM, IPPROTO_TCP) = 3//在第0秒创建一个socket+0  setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0+0  bind(3, ..., ...) = 0+0  listen(3, 1) = 0//TCP three-way handshake+0  < S 0:0(0) win 4000 <mss 1000>//<表示输入数据包+0  > S. 0:0(0) ack 1 <...>//>表示预期协议栈响应的包+.1 < . 1:1(0) ack 1 win 1000+0 accept(3, ..., ...) = 4+0 write(4, ..., 10) = 10+0 > P. 1:11(10) ack 1+.1 < . 1:1(0) ack 6 win 1000

上述代码可以通过tcpdump抓到8080端口的包

packetdrill实际上是通过创建一个虚拟网卡来模拟协议的执行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一些常用的后台定位问题工具介绍
strace -p 28182 -s4086 -T -f [-e trace=network/process/signal]
用户2177834
2019/02/21
1.2K0
史上最简明的 Tcpdump 入门指南,看这一篇就够了
网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。
杰哥的IT之旅
2021/09/27
2.3K0
linux 抓包命令tcpdump
顾名思义,tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或者端口的过滤,并提供and\or\not等逻辑语句来帮助你去掉无用的信息。
全栈程序员站长
2022/10/02
3.3K0
Linux 命令(137)—— strace 命令
strace 命令是一个集诊断、调试、统计于一体的工具,我们可以使用 strace 对程序的系统调用和信号传递的跟踪结果来对程序进行分析,以达到解决问题或者是了解程序工作过程的目的。当然strace 与专业的调试工具比如说 gdb 之类的是没法相比的,因为它不是一个专业的调试器。
恋喵大鲤鱼
2020/04/13
8.5K0
Linux常用shell语法和命令
判断/home/oicq/script/get_random_shm_key.sh是否存在
chain
2018/08/02
4.4K0
Linux基础急速入门:用 TCPDUMP 抓包
简介 网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。 tcpdump - dump traffic on a network 例子 不指定任何参数 监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。 tcpdump 监听特定网卡 tcpdump -i en0 监听特定主机 例子:监听本机跟主机182.254.38.55之间往来的通信包。 备注:出、入的包都会被监听。 tcpdump
小小科
2018/05/04
2.8K0
Linux基础急速入门:用 TCPDUMP 抓包
Linux后台服务常用诊断命令和方法
vmstat 1  每隔一秒输出系统状态,数据来源/pro/stat,输出各列的含义
洛杉矶
2020/10/23
1.7K0
tcpdump命令使用简介
tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。
吴易娃
2024/01/12
5400
linux抓包和分析工具_linux tcpdump 抓包
实践中,通常在 Linux 里用tcpdump命令抓包,然后在Windows 里用wireshark软件分析包。
全栈程序员站长
2022/11/04
4.8K0
Linux tcpdump命令详解
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
菲宇
2022/12/21
9370
linux系统-tcpdump常用抓包命令_tcpdump循环抓包
tcpdump命令–>用来将网络中传送的数据包的”头”完全截获下来提供分析,常见的有Wireshark。在Linux中输入命令man tcpdump给出的定义如下所示:
全栈程序员站长
2022/09/24
4.5K0
linux系统-tcpdump常用抓包命令_tcpdump循环抓包
十个例子让你了解 strace 的使用技巧
tcpdump 作为计算机网络排查的一大神器,掌握了上文所说的技巧,可以让你随时随地得心应手的掌握网络应用的一举一动。
用户3147702
2022/06/27
4.9K0
十个例子让你了解 strace 的使用技巧
2017,科学使用strace神器(附代码,举栗子)
  我感到惊讶,都2017年了,几乎没有人知道他们可以使用strace的了解所有事情。它总是我拔出的第一个调试工具之一,因为它通常在我运行的Linux系统上可用,并且它可以用于解决各种各样的问题。
sunsky
2020/08/20
1.3K0
2017,科学使用strace神器(附代码,举栗子)
Linux后台开发常用工具
本文是个大杂烩,内容为日常点滴的日积月累,持续更新当中,可关注博客(https://blog.csdn.net/Aquester或http://aquester.blog.chinaunix.net),查看最新版本。文中的内容,可帮忙开发提升分析和定位各类问题,比如找出导致IO负载高的进程等,以及一些简单的运维工作等。
一见
2018/12/26
3.9K0
Linux常用性能调测命令简介
top常用参数,top是交互式命令,以下几个参数经常用到,在top界面输入以下字母:
腾讯蓝鲸助手
2022/04/24
1.9K1
Linux 常用命令
自己开始接触 Linux「Ubuntu」应该是在大学期间, 接触 Unix「Mac OSX」是在工作后的第一份工作,吭哧吭哧的用了好几年的 Linux,强行此文,自己总结了目前经常用到的几个命令,希望给 Linux 用户提供帮助。
叉叉敌
2019/02/20
8790
Linux 抓包工具——tcpdump
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
头发还在
2023/10/16
1.4K0
Linux 抓包工具——tcpdump
linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续; (2) top:如果想对进程运行时间监控,应该用 top 命令; (3) kill 用于杀死进程或者给进程发送信号; (4) 查看文章最后的man手册,可以查看ps的每项输出的含义,to find: STANDARD FORMAT SPE
洗尽了浮华
2018/01/23
11.6K0
df 和 ls 命令执行夯主
其实他说第二点问题的时候我就已经猜到问题所在了,那不就是远程挂载的磁盘非正常的掉了,然后就会造成这个问题。但是他说 ISCSI 这个玩意的时候我不知道是啥,于是查了一下,有兴趣的同学可以看看这是:https://zhuanlan.zhihu.com/p/60986068,看的出来他是一个网络存储,那么就更加坚定我的想法了,开始指挥解决问题。
张琳兮
2020/05/25
2.1K0
df 和 ls 命令执行夯主
Strace命令手册
strace简介 strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 strace参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -
苦咖啡
2018/04/28
1.7K0
相关推荐
一些常用的后台定位问题工具介绍
更多 >
LV.0
这个人很懒,什么都没有留下~
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验