AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 726969
Accepted
j0h
j0h
Asked: 2022-12-02 08:16:34 +0800 CST2022-12-02 08:16:34 +0800 CST 2022-12-02 08:16:34 +0800 CST

我如何实时解析 tcpdump 流?

  • 772

我有一个 debian 安装,其中 OEM 有一堆我不认识的进程在运行,我想弄清楚这些东西是否正在拨回家。

我跑了sudo tcpdump | grep ^e <ssh_ip>

但管道不断破裂。我通过 ssh 连接,grep ^e 是为了省略我的客户端的 ssh ip。有没有办法持续监控出站请求的网络连接?我不知道这东西会拨回家,或者具体是什么地方,我只是怀疑它会从与这个问题无关的其他行为中拨回家。

broken pipe 通常意味着连接断开,但我的 ssh 连接很好,它似乎与 tcpdump 有其他关系

networking
  • 1 1 个回答
  • 38 Views

1 个回答

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2022-12-03T00:42:37+08:002022-12-03T00:42:37+08:00

    在:

    sudo tcpdump | grep ^e <ssh_ip>
    

    首先,^e根据 shell 的不同,它具有不同的含义。

    • 在 Bourne shell 中,^是 ( 的别名|,^最初更像↑是其前身 Thompson shell 中的管道运算符),因此您可以通过管道在那里grep进行e命令。
    • 在fish3.2 之前的版本中,^是重定向 stderr(的缩写2>)。
    • inrc和导数,^是一种串联运算符,所以grep ^e会变成grepe.
    • in zsh -o extendedglob,^是一个否定 glob 运算符,因此^e将扩展到当前目录中除名为e.
    • 在csh/ tcsh/ bash/zsh中,^仅在行的开头是特殊的,并且仅当未禁用历史扩展时。所以不在这里。
    • 在大多数其他 shell 中,^e将按字面意思传递给grep.

    因此,假设后面的 shell 之一,该命令将启动sudo tcpdump并grep ^e <ssh_ip>与一个通过管道连接到另一个的输入的输出同时运行。

    参数的语法grep是grep [<options>] <regular-expression> [<files>]([...]表示可选部分)。如果没有文件,grepgrep 其 stdin¹。选项以-字符开头。

    所以这^e是正则表达式,并且<ssh_ip>是用于查找与该正则表达式匹配的行的文件。

    作为正则表达式,^e匹配行的开头后跟e,以便报告以e.

    在这里,很可能该<ssh_ip>文件不存在,因此grep将立即返回错误。

    那时tcpdump,继承自 的 stdoutsudo将变成破损的管道,因此第一次tcpdump尝试输出某些内容时,它将收到 SIGPIPE 信号并终止,或者如果它忽略该信号,write()则会因EPIPE错误而失败。在这里,tcpdump 设法写入一条错误消息表明它要么忽略该信号并报告其失败write(),要么它有一个处理程序并在终止前报告其接收情况。

    如果tcpdump你想从_ _grep -Fvw <ssh_ip>-F-v-w

    • 匹配固定F字符串而不是正则表达式(用于.匹配文字.而不是正则表达式中的任何单个字符)。
    • 重新v匹配:返回不匹配的行。
    • 仅匹配words,(例如不在<ssh_ip>==10.10.10.10中找到)。210.10.10.109

    默认情况下,当 tcpdump 检测到它的输出没有到达终端时,它会恢复为块缓冲,因此如果你想在输出出现时立即看到它,你可能希望将-l选项添加到 tcpdump 以重新启用行缓冲。

    但无论如何,tcpdump 可以自己过滤数据包。在这里,要排除来自/到给定 IP 地址的数据包,您只需要:

    sudo tcpdump not host <ssh_ip>
    

    或者只过滤掉来自该 IP 地址的 ssh 流量:

    sudo tcpdump 'not (host <ssh_ip> and tcp port ssh)'
    

    (假设 ssh 连接在默认端口 22 上)。

    这些过滤器(Berkeley Packet Filters,BPF)被编译成传递给内核(setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, filter)至少在 Linux 上)的二进制过滤器表达式。过滤在那里进行,因此与 tcpdump 请求所有流量、解码所有流量并将其传递给 grep 相比,tcpdump 和一般系统的工作实际上更少。

    wireshark,它的命令行界面tshark是一个更高级的流量分析应用程序,您也可以在这里考虑。它们支持两种类型的过滤器:BPF 一种称为捕获过滤器(通过 传递-f)和显示过滤器(通过 传递-Y)使用 wireshark 自己的过滤器语法和更高级的功能进一步应用于内核返回的数据包。


    ¹ 或递归进入当前工作目录,如果在最新版本的 GNU 实现中给出了-r/-R选项grep。

    • 2

相关问题

  • 查找与端口关联的线程/脚本?

  • 关于网络挂载文件的问题

  • IP地址可以以255结尾而不是广播IP地址吗?

  • 无法识别arp命令或ip命令哪个MAC地址输出正确

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve