solve issure from mac and windows

This commit is contained in:
mhrooz 2024-10-28 10:23:29 +01:00
commit 8ee261064b
2 changed files with 399 additions and 120 deletions

View File

@ -1,54 +1,106 @@
## router table ## router table
| device | eth | ip | | device | eth | ip |
| ------- | ---- | ----------- | | ------- | ---- | ----------- |
| PC1 | eth1 | 10.5.0.2/24 | | PC1 | eth1 | 10.5.0.2/24 |
| PC2 | eth1 | 10.5.1.2/24 | | PC2 | eth1 | 10.5.1.2/24 |
| router1 | eth1 | 10.5.0.1/24 | | router1 | eth1 | 10.5.0.1/24 |
| router2 | eth1 | 10.5.1.1/24 | | router2 | eth1 | 10.5.1.1/24 |
router -> router
### 主要工具:`ip` ```
sender # sender eth # receiver # receiver eth # losses #
**`ip`** 是 IPRoute2 工具集中最常用的命令,能够管理和配置 IP 地址、路由、链路等多种网络参数。与旧版的 `ifconfig``route` 命令相比,`ip` 更加灵活和强大。 1 2 2 2 20
1 3 3 2 20
### **`ip` 命令的常见用法** 1 4 4 1 0
2 2 1 2 20
1. **查看网络接口** 2 3 3 3 0
2 4 4 2 0
```bash 3 2 1 3 0
ip link show 3 3 2 3 0
``` 3 4 4 3 0
显示所有网络接口及其状态,类似于 `ifconfig` 4 1 1 4 0
4 2 2 4 0
2. **启用或禁用网络接口** 4 3 3 4 0
```bash ```
sudo ip link set dev eth0 up # 启用接口
sudo ip link set dev eth0 down # 禁用接口
```
3. **添加/删除 IP 地址**
```bash router -> pc
sudo ip address add 192.168.1.10/24 dev eth0 # 为 eth0 接口添加 IP 地址
sudo ip address del 192.168.1.10/24 dev eth0 # 从 eth0 接口删除 IP 地址 ```
```
sender # sender eth # receiver # receiver eth # losses # │
4. **显示路由表** 1 1 1 1 0 │
2 1 1 1 0 │
```bash 2 1 2 1 0 │
ip route show 2 1 3 1 0 │
``` 3 1 3 1 0
显示当前的路由表,类似于 `route` 命令。 ```
5. **添加/删除路由** pc->pc
```bash
sudo ip route add 192.168.1.0/24 via 192.168.1.1 # 添加路由条目 ```
sudo ip route del 192.168.1.0/24 # 删除路由条目
``` sender # sender eth # receiver # receiver eth # losses #
2 1 1 1 0
6. **查看 ARP 表** 2 1 3 1 0
```bash ```
ip neighbor show
``` pc->router
显示 ARP 表,类似于 `arp -a`
```
sender # sender eth # receiver # receiver eth # losses #
2 1 2 1 0
3 1 3 1 0
```
### 主要工具:`ip`
**`ip`** 是 IPRoute2 工具集中最常用的命令,能够管理和配置 IP 地址、路由、链路等多种网络参数。与旧版的 `ifconfig``route` 命令相比,`ip` 更加灵活和强大。
### **`ip` 命令的常见用法**
1. **查看网络接口**
```bash
ip link show
```
显示所有网络接口及其状态,类似于 `ifconfig`
2. **启用或禁用网络接口**
```bash
sudo ip link set dev eth0 up # 启用接口
sudo ip link set dev eth0 down # 禁用接口
```
3. **添加/删除 IP 地址**
```bash
sudo ip address add 192.168.1.10/24 dev eth0 # 为 eth0 接口添加 IP 地址
sudo ip address del 192.168.1.10/24 dev eth0 # 从 eth0 接口删除 IP 地址
```
4. **显示路由表**
```bash
ip route show
```
显示当前的路由表,类似于 `route` 命令。
5. **添加/删除路由**
```bash
sudo ip route add 192.168.1.0/24 via 192.168.1.1 # 添加路由条目
sudo ip route del 192.168.1.0/24 # 删除路由条目
```
6. **查看 ARP 表**
```bash
ip neighbor show
```
显示 ARP 表,类似于 `arp -a`

359
Notes.md
View File

@ -146,7 +146,161 @@ Empfängt ein Router ein IP-Paket, das an die Ziel-IP-Adresse 10.0.0.3 adressier
**“两个条目都可以应用于目标IP地址10.0.0.3IP地址10.0.0.3的前20位匹配第一个条目同样的前24位匹配第二个条目。在这种情况下将选择更精确的条目也就是具有更长网络ID的条目。这种策略称为最长前缀匹配Longest Prefix Match。”** “两个条目都可以应用于目标IP地址10.0.0.3IP地址10.0.0.3的前20位匹配第一个条目同样的前24位匹配第二个条目。在这种情况下将选择更精确的条目也就是具有更长网络ID的条目。这种策略称为最长前缀匹配Longest Prefix Match。”
## 1.3 RNP 基础设施、Linux 和工具
Die Infrastruktur, die für die Durchführung des RNP zur Verfügung steht setzt sich zusammen aus virtuellen Maschinen. Der Zugang zu den virtuellen Maschinen (VM) erfolgt über gruppeXY.rnp.lab.nm.ifi.lmu.de. Diese sind aus dem MWN, zum Beispiel den cip-Pools, erreichbar. Die VMs selbst haben standardmäßig keinen Zugang zum MWNoderdemInternet. Jeder Praktikumsgruppe stehen sieben VMs zur Verfügung, mit denen die Versuche ab OSI Schicht 3 und höher durchgeführt werden. Der Einsatz von virtuellen Maschinen erlaubt es größere Netze mit mehr Knoten zu betreiben, ohne den Management-Aufwand und Platzbedarf vieler physischer Systeme bewältigen zu müssen
用于执行 RNP 实验的基础设施由虚拟机VM组成。对虚拟机的访问通过 `gruppeXY.rnp.lab.nm.ifi.lmu.de` 进行,这些虚拟机可以从 MWN例如 CIP 池访问。VM 本身默认无法访问 MWN 或互联网。每个实验小组都有七个虚拟机可供使用,实验在 OSI 模型的第三层及以上层次进行。使用虚拟机可以构建具有更多节点的大型网络,而不必应对众多物理系统的管理和空间需求。
### 1.3.1 Linux 简介
Auf den VMs an denen Sie die Versuche durchführen werden, ist OpenWrt und Debian (GNU/Linux) installiert. Im Rahmen dieses Praktikums werden Sie Linux meistens über ein Terminal bedienen, auf dem ein Kommandozeileninterpreter (Shell) läuft. Nach dem erfolgreichen Anmelden am System startet Linux automatisch eine Shell. Die Standardeinstellung hierfür ist die Bourne-Again SHell (Bash)
在运行实验的虚拟机上安装了 OpenWrt 和 DebianGNU/Linux。在本次实验中Linux 主要通过终端操作终端是一个命令行解释器Shell。成功登录系统后Linux 会自动启动一个 Shell。默认设置为 Bourne-Again ShellBash
Jeder Benutzer hat ein eigenes Verzeichnis (Home-Verzeichnis). Für den Benutzer rootist dies das Verzeichnis /root. Für alle anderen Abb. 1.7: Tux Benutzer ist das Home-Verzeichnis ein Unterverzeichnis von /home, das dem Benutzer namen entspricht (/home/). Wann immer sich ein Benutzer in seinem Home-Verzeichnis befindet, wird dieser Pfad von der Bash mit ˜ (Tilde) abgekürzt. Der Aufbau der Eingabezeile kann verändert werden, wodurch der hier beschriebene Aufbau nicht allgemein für alle Benutzer und Systeme gilt. Es hat sich jedoch durchgesetzt, dass am Ende einer Eingabezeile des Benutzers root das #-Symbol steht.
每个用户都有自己的目录Home 目录)。对于用户 `root`,这个目录是 `/root`。对于其他用户,其 Home 目录是 `/home` 下的一个子目录,与用户名一致(`/home/<用户名>`)。当用户在 Home 目录中时Bash 会用 `~`(波浪号)简写此路径。输入提示符的结构可以更改,因此此结构并不适用于所有用户和系统。不过已约定,用户 `root` 在命令行提示符的末尾会显示 `#` 符号。
Der wichtigste Befehl beim Arbeiten mit der Bash ist man. Bis auf wenige Ausnahmen existiert für jedes Programm eine Anleitung. Der Befehl man dient dem Lesen von Anleitungen. Ein Befehl auf der Kommandozeile ist häufig ein Programmaufruf, wie z.B. pwd, ls und man. Um die Anleitung für ein bestimmtes Programm einzusehen geben Sie man ein. So erhalten Sie z.B. die Anleitung zu man selbst mittels
在使用 Bash 时最重要的命令是 `man`。几乎每个程序都有一个说明文档,`man` 命令用于查看这些说明。命令行上的指令通常是程序调用,如 `pwd`、`ls` 和 `man`。要查看某个程序的说明,输入 `man <程序名>`。例如,输入以下命令可以获得 `man` 命令的说明:
```bash
# man man
```
要查看 `pwd` 的说明:
```bash
# man pwd
```
Beachten Sie, dass OpenWrt optimiert ist für Router mit wenig Speicherplatz. Aus diesem Grund steht ihnen der Befehl man auf OpenWrt (router1-router3) nicht zur Verfügung. Sie können stattdessen auf die äußere Managementmaschine ausweichen. Die Verwendung der Befehle zwischen Debian und OpenWrt ist meistens identisch
请注意OpenWrt 针对内存较小的路由器进行了优化,因此在 OpenWrt如 router1-router3上无法使用 `man` 命令。不过可以在外部的管理机器上使用 `man` 命令。Debian 和 OpenWrt 之间的命令使用通常是相似的。
偏离标准的情况,例如配置文件文档,可以在 OpenWrt 的在线文档中找到:[OpenWrt 文档链接](https://openwrt.org/docs/start)。
Abweichungen davon, wie zum Beispiel die Dokumentation von Konfigurationsdateien, f inden Sie in der Online-Dokumentation1 zu OpenWrt.
**Bash 教程**[Garr 08])是入门学习的好资源。教程的各个章节特别推荐“输入/输出重定向”和 Bash 编程部分。通过“输出重定向”可以将程序输出重定向到文件中便于后续分析。Bash 编程允许编写简化实验任务的小脚本。
Das Bash-Tutorial [Garr 08] ist ein guter Ausgangspunkt für die Einarbeitung. Insbe sondere sei auf die Abschnitte des Tutorials hingewiesen, die sich mit “Input-/Output redirection” und Bash-Programmierung beschäftigen. Mit “Output-redirection” kann man Programmausgaben in eine Datei umlenken und anschließend in Ausarbeitungen einfügen. Bash-Programmierung ermöglicht es kleine Skripte zu schreiben, die oft durch geführte Aufgaben vereinfachen.
### 1.3.2 使用虚拟基础设施
Jeder Gruppe steht eine virtuelle Infrastruktur in Form von sieben VMs zur Verfügung; drei PCs und vier Router. Alle sieben VMs sind Linux-Rechner. Der Unterschied zwi schen den VM-Arten besteht darin, dass die PCs nur eine Verbindung in die virtuelle Infrastruktur haben, während die Router mit mehreren Maschinen verbunden sind. Die Rechnernamen der VMs sind pc1, pc2, pc3, router1, router2, router3 und router4; diese Bezeichnungen tauchen vor allem in den Aufgabenstellungen auf.
每个小组都有一个由七个虚拟机VM组成的虚拟基础设施包括三台 PC 和四台路由器。所有七台虚拟机都运行 Linux 系统。PC 和路由器的区别在于PC 只有一个连接到虚拟基础设施的接口,而路由器连接了多个设备。虚拟机的名称为 `pc1`、`pc2`、`pc3`、`router1`、`router2`、`router3` 和 `router4`,这些名称将在实验任务中频繁出现。
Die Infrastrukturen sind mit 1 beginnend aufsteigend durchnummeriert (analog zu den Gruppen). Damit es bei der Adressierung zu keinen Überschneidungen kommt, ver wenden Sie nur IP-Adressen, die mit 10. Infrastrukturnummer beginnen z.B. 10.1.0.1 ist eine IP-Adresse, die nur in Infrastruktur 1 verwendet werden darf. Das heißt, jeder Infrastruktur ist ein Subnetz 10. Infrastrukturnummer .0.0/16 zugeordnet.
基础设施的编号从 1 开始,以对应实验小组编号。为了避免地址冲突,每组的 IP 地址从 10 开始,格式为 `10.<组号>.X.Y`,例如 `10.1.0.1` 表示基础设施 1 的一个 IP 地址。每个基础设施的地址范围是 `10.<组号>.0.0/16`
Jede VM ist an ein Management-Netz angeschlossen. Zugang zu Ihren VMs erhalten Sie, über den Rechner rnp@gruppeXY.rnp.lab.nm.ifi.lmu.de Melden Sie sich zunächst per SSH an (man ssh) und ändern Sie Ihr Startpasswort. Von dort aus können Sie ihre VMs per SSH erreichen. Beispiel: SSH-Aufruf für Gruppe 1 um auf router4 zu gelangen
每个虚拟机连接到一个管理网络。可以通过 SSH 连接到虚拟机,使用 `rnp@gruppeXY.rnp.lab.nm.ifi.lmu.de` 登录,然后更改初始密码。之后可以从该系统 SSH 登录到其他虚拟机。
示例:小组 1 连接到 `router4` 的 SSH 命令:
```bash
ssh rnp@gruppe01.rnp.lab.nm.ifi.lmu.de
ssh root@router4
```
Auf den VMs wurde Public-Key Authentifizierung eingerichtet, deshalb benötigen Sie an dieser Stelle kein Passwort.
所有虚拟机均已配置为使用公钥认证,因此不需要密码。
**警告**:请不要将数据保存在虚拟机上!虚拟机可能会被自动重置,届时数据会丢失。请将数据保存在您的 CIP 目录中。
通过在远程机器上使用 `tmux`,您可以通过单个 SSH 会话使用多个终端。`tmux` 会话可以被中断并稍后继续。`tmux` 是一种窗口管理工具。
### 1.3.3 IRoute2 - IP 配置
IProute2 ist eine Sammlung von Programmen für die Steuerung von Netzeinstellungen eines Rechners. Das prominenteste Tool aus dieser Sammlung ist ip. Die Funktionen von ip sind zahlreich und umfassen alles notwendige für die Konfiguration von (logischen) Verbindungen, IPv4-/IPv6-Adressen und Routen. Die man-page zu ip bietet einen Überblick über dessen Mächtigkeit.
**IRoute2** 是一组用于管理计算机网络设置的程序。该工具集中最常用的工具是 **`ip`**。`ip` 命令提供了丰富的功能涵盖了配置逻辑连接、IPv4/IPv6 地址和路由所需的一切。`ip` 的手册页概述了其强大功能。
Zu den grundlegenden, für das Praktikum relevante, Funktionen von ip gehören
以下是一些在本实验中相关的 `ip` 命令:
| 命令 | 说明 |
| ---------------------------------------- | ------------------------------------------------------------ |
| `ip link show` | 显示所有网络接口 |
| `ip link set ethX up` | 激活接口 ethX |
| `ip address show` | 显示所有接口的 IP 地址 |
| `ip address add 192.168.1.1/24 dev ethX` | 将 IP 地址 192.168.1.1 和子网掩码 255.255.255.0CIDR 表示法)分配给接口 ethX |
| `ip route show` | 显示路由表 |
| `ip neighbor show` | 显示 ARP 表 |
使用以下命令可以在命令行上显示当前的路由表:
```bash
ip route show
```
#### 添加路由
要在路由表中添加一条路由,可以使用以下命令:
```bash
ip route add <目标> via <网关>
```
例如:
```bash
ip route add 192.168.1.0/24 via 192.168.1.1
```
这个示例命令会将所有目标为 `192.168.1.0/24` 子网的数据包发送到 `192.168.1.1`。如果省略子网掩码 `/24`,则会添加一个 Host 路由带有32位的特定 IP 地址)。
#### 删除路由
要删除一条路由,可以使用以下命令:
```bash
ip route del <目标>
```
例如:
```bash
ip route del 192.168.1.0/24
```
注意:
Linux 内核通常不会自动转发 IP 数据包。可以通过 `/proc` 文件系统启用 IPv4 转发,将路径 `/proc/sys/net/ipv4/ip_forward` 中的值设置为 `1`(默认值为 `0`)。使用以下命令来激活 IP 转发:
```bash
echo 1 > /proc/sys/net/ipv4/ip_forward
```
### 1.3.4 `tcpdump` - 数据分析
Das Programm tcpdump zeigt Informationen aus den Protokollheadern eines jeden gesendeten oder empfangenen Pakets. Startet man tcpdump ohne Argumente, so wird der gesamte Datenverkehr aller Schnittstellen eines Rechners analysiert und optisch aufbereitet. Damit Sie auch sicher nur Ihren eigenen Datenverkehr analysieren achten Sie beim Aufruf von tcpdump darauf, dass Sie stets einen entsprechenden Filter für Ihr Subnetz benutzen. Zur optischen Aufbereitung von tcpdump gehört auch das Auflösen von IP-Adressen und Port-Nummern zu Rechner- und Port-Namen. In diesem Praktikum ist diese Anwendung von tcpdump nicht der Normalfall. Statt dessen werden meist folgende Optionen verwendet:
`tcpdump` 程序显示每个发送或接收数据包的协议头信息。如果直接运行 `tcpdump` 而不带参数,它会捕获并分析系统所有网络接口上的所有流量数据。为了确保仅分析自身的网络流量,建议在运行 `tcpdump` 时为特定的子网指定过滤器。在网络分析中,`tcpdump` 还可以将 IP 地址和端口号解析为主机名和服务名,但在本次实验中不使用此功能。建议使用以下 `tcpdump` 选项:
| 选项 | 参数 | 说明 |
| ---- | ------ | ---------------------------------------------- |
| `-n` | 无 | 禁止将数值IP地址和端口解析为主机和服务名称 |
| `-i` | 接口名 | 仅分析指定的网络接口 |
| `-e` | 无 | 显示第二层协议头信息 |
Zusätzlich zu Optionen implementiert tcpdump eine Filtersprache, die es ermöglicht nur bestimmte Rahmen/Pakete/Segmente zu analysieren. Alle Optionen, sowie die Filter Tastenkombination Strg sprache werden in der manpage und unter [WWW 09] erläutert. tcpdump wird mit der + c beendet.
此外,`tcpdump` 还支持过滤规则,仅分析特定的数据包。所有选项和过滤规则的详细信息可参考手册页或特定文档。按 `Ctrl + C` 可终止 `tcpdump` 的数据捕获。
@ -154,98 +308,57 @@ Empfängt ein Router ein IP-Paket, das an die Ziel-IP-Adresse 10.0.0.3 adressier
### A101 ### A101
**A101 拓扑发现Topology Discovery** **A101 拓扑发现Topology Discovery**
**章节 1.3.2** 描述了提供给您的虚拟基础设施,以及如何访问您的虚拟机器。 **章节 1.3.2** 描述了提供给您的虚拟基础设施,以及如何访问您的虚拟机器。
请为您可用的虚拟机器创建一个网络拓扑图(参见**章节 1.1.2** 请为您可用的虚拟机器创建一个网络拓扑图(参见**章节 1.1.2**
1. **配置您的虚拟机器**,使用来自您子网的 IPv4 地址!为此请使用 ip 命令!(注:可以使用 ip help 获取帮助) 1. **配置您的虚拟机器**,使用来自您子网的 IPv4 地址!为此请使用 ip 命令!(注:可以使用 ip help 获取帮助)
2. **确定两台虚拟机之间的连接**,通过使用 ping 命令在它们之间发送数据!(注:可以使用 man ping 获取帮助) 2. **确定两台虚拟机之间的连接**,通过使用 ping 命令在它们之间发送数据!(注:可以使用 man ping 获取帮助)
3. **创建一个网络拓扑图**,反映您的配置和结果! 3. **创建一个网络拓扑图**,反映您的配置和结果!
这段内容要求你配置虚拟机器的IP地址使用 ping 命令测试虚拟机之间的连接,并最终绘制一个反映配置的网络拓扑图。
### A102 使用 `tcpdump` 进行故障诊断
这段内容翻译如下: 在本任务中,使用 `tcpdump` 来查看 ICMP “回显请求”echo requestPDU。首先在 `pc1``router1` 之间启动一个 `ping`,然后在其中一台机器上运行 `tcpdump`以便读取ICMP PDU。
解释当以下情况时,`tcpdump` 的输出:
i) **未使用** `-e` 选项。
**A102 使用 tcpdump 进行故障诊断** ii) **使用了** `-e` 选项。
iii) 现在在 `pc1` 上执行命令 `ifup eth1`,这样 `pc1` 将获得 IP 地址 **172.16.1.100**。给 `router1` 上对应的接口分配 IP 地址 **172.16.1.1**。使用这些地址重新进行 `ping` 操作。
iv) 使用 `tcpdump` 查看 IP 地址的区别,并解释为什么没有收到响应。
在本任务中,使用 tcpdump 来查看ICMP “回显请求” PDU。开始时在 pc1 和 router1 之间启动一个 ping然后在两台计算机之一上运行 tcpdump以便能够读取ICMP PDU v) 纠正错误并展示 `ping` 操作成功的结果
---
### A103 静态路由
解释 tcpdump 的输出,当… 配置虚拟机,使它们能够传输多跳的数据包。**提示**:所有子任务都应该以数据包可以来回传输为目标,即数据包应在发送方和接收方之间双向传输。
要查看并管理设备的路由表,请使用 `ip` 工具:
i) 配置**主机路由**,使得 `pc1``pc2` 能够相互交换数据!通过 ICMP 回显请求/响应来验证此情况。将成功配置后的路由表截图加入报告!只需提供代表性的表格,确保流程清晰可见。
i) …您**没有**使用 -e 选项时。 ii) 将 `pc1``pc2` 上的主机路由替换为默认路由!
iii) 将路由器上的主机路由替换为到 `pc1``pc2` 子网的路由!
iv) 从 `pc1` 启动一个到 `pc2``traceroute`。通过 `tcpdump` 的输出解释其工作方式。
ii) …您使用了 -e 选项时 v) 配置路由,使得从 `pc1``pc2` 的数据**总是**通过 `router4` 传输,而从 `pc2``pc1` 的数据**永远不会**经过 `router4`。使用 `traceroute` 验证并记录输出结果。画出一个有向的网络拓扑图来展示配置
---
iii) 现在在 pc1 上运行命令 ifup eth1。这样pc1 将获得IP地址 **172.16.1.100**。将IP地址 **172.16.1.1** 分配给 router1 的相应接口。使用这些地址重复 ping 操作。
iv) 使用 tcpdump 来查看IP地址之间的区别并解释为什么没有响应。
v) 纠正该错误并证明 ping 操作现在已经成功。
**A103 静态路由**
现在配置虚拟机,使它们能够通过多个跳跃传输消息。**提示**:所有子任务都应以数据包能“来回”传输为目标,即数据包应能够在发送方和接收方之间双向传输。
为了查看和管理一台计算机的路由表,请使用工具 ip
i) 配置**主机路由**,以便 pc1 和 pc2 能够交换数据通过ICMP回显请求/响应来验证这一点。成功配置后,记录涉及的虚拟机的路由表。只需提供一些代表性的表格,确保可以清楚地看到整个流程。
ii) 将 pc1 和 pc2 上的主机路由替换为默认路由!
iii) 将路由器上的主机路由替换为到 pc1 和 pc2 各自子网的路由!
iv) 从 pc1 上启动一个到 pc2 的 traceroute。通过 tcpdump 解释其工作机制。
v) 配置路由,使得从 pc1 到 pc2 的所有数据都必须通过 router4 进行中继,并且从 pc2 到 pc1 的所有数据也必须通过 router4 中继!证明您的配置有效,使用相应的 traceroute 输出记录结果。画一个有方向性的网络拓扑图来展示最终结构。
这段内容描述了如何使用 tcpdump 进行网络故障排除,以及如何设置静态路由来确保虚拟机之间的通信。
## Questions ## Questions
#### 1.为什么不能用10.5.0.0 #### 1.为什么不能用10.5.0.0
@ -547,16 +660,130 @@ Linux内核默认情况下不会转发IP数据包。如果你需要启用IP转
2. **CIDR无类域间路由**:在 ip address add 命令中CIDR表示法如 /24用于指定子网掩码的长度它规定了网络部分的位数通常用于确定IP地址分配的范围。 2. **CIDR无类域间路由**:在 ip address add 命令中CIDR表示法如 /24用于指定子网掩码的长度它规定了网络部分的位数通常用于确定IP地址分配的范围。
3. ip **命令 vs** ifconfig **命令**ip 命令是 ifconfig 的替代方案,功能更强大,能够更精确地处理现代网络配置 3. ip **命令 vs** ifconfig **命令**ip 命令是 ifconfig 的替代方案,功能更强大,能够更精确地处理现代网络配置
**`tcpdump`** 是一个用于捕获和分析网络流量的命令行工具,可以实时监控网络接口上通过的数据包。它非常适合网络故障排查和流量分析。
### 基本用法
最基本的 `tcpdump` 命令如下:
如果你有更多特定问题,或者需要对某个命令进行更深入的解释,请告诉我! ```bash
sudo tcpdump -i <interface>
```
- **`-i`**:指定要监听的接口,例如 `eth0`、`wlan0` 等。如果不指定接口,`tcpdump` 将选择系统的默认网络接口。
### 常用选项
PC1 10.5.0.1 1. **显示所有数据包**
```bash
sudo tcpdump
```
这会捕获系统默认网络接口上的所有数据包。
PC2 10.5.1.2 2. **捕获特定接口上的数据包**
```bash
sudo tcpdump -i eth0
```
这会捕获 `eth0` 接口上的数据包。
Router1 10.5.0.0 3. **指定捕获的数据包数量**
```bash
sudo tcpdump -c 10
```
`-c` 选项表示捕获10个数据包后自动停止。
4. **保存数据包到文件**
```bash
sudo tcpdump -w capture.pcap
```
`-w` 选项会将捕获的数据包保存到 `capture.pcap` 文件中,可以使用 Wireshark 等工具进行详细分析。
5. **读取保存的文件**
```bash
sudo tcpdump -r capture.pcap
```
`-r` 选项从文件中读取并显示捕获的数据包内容。
### 过滤流量
`tcpdump` 支持各种过滤选项,便于精确捕获需要的数据包。以下是一些常用的过滤示例:
1. **过滤特定协议**
```bash
sudo tcpdump -i eth0 icmp
```
捕获 `eth0` 接口上的所有 ICMP如 ping数据包。
2. **过滤特定端口**
```bash
sudo tcpdump -i eth0 port 80
```
捕获通过端口 80HTTP的所有数据包。
3. **过滤特定 IP 地址**
```bash
sudo tcpdump -i eth0 host 192.168.1.1
```
捕获所有源或目标地址为 `192.168.1.1` 的数据包。
4. **过滤源 IP 或目标 IP**
```bash
sudo tcpdump -i eth0 src 192.168.1.1
sudo tcpdump -i eth0 dst 192.168.1.1
```
分别捕获源地址为 `192.168.1.1` 和目标地址为 `192.168.1.1` 的数据包。
5. **组合过滤条件**
```bash
sudo tcpdump -i eth0 src 192.168.1.1 and port 80
```
捕获源地址为 `192.168.1.1` 且端口为 80 的数据包。
### 显示数据包的详细信息
`tcpdump` 支持多种详细级别的输出:
- **`-v`**:详细输出
- **`-vv`**:更详细输出
- **`-vvv`**:最大详细输出
```bash
sudo tcpdump -i eth0 -vv
```
### 显示数据包的十六进制和 ASCII 内容
使用 **`-X`** 选项可以显示每个数据包的十六进制和 ASCII 内容:
```bash
sudo tcpdump -i eth0 -X
```
### 捕获并显示链路层头信息
使用 **`-e`** 选项可以显示链路层(如以太网)头信息:
```bash
sudo tcpdump -i eth0 -e
```
### 停止捕获
在终端中按 **Ctrl+C** 可停止捕获数据包,`tcpdump` 会显示捕获的包的统计信息。
### 示例:捕获 HTTP 和 HTTPS 流量
```bash
sudo tcpdump -i eth0 port 80 or port 443
```
该命令捕获 `eth0` 接口上的 HTTP端口80和 HTTPS端口443流量。
### 示例:捕获并查看特定网络段的数据包
```bash
sudo tcpdump net 192.168.1.0/24
```
捕获源或目标在 `192.168.1.0/24` 网段内的所有数据包。
### 总结
- **接口选择**:使用 `-i` 指定要监听的接口。
- **捕获过滤**可以根据协议、端口、IP 等设置过滤条件。
- **数据包保存与读取**:使用 `-w` 保存数据包,`-r` 从文件读取数据包。
- **详细信息显示**`-v`、`-vv`、`-vvv` 设置输出的详细级别。
`tcpdump` 是一个功能强大的工具,适用于实时流量分析和网络故障排查。如果你有特定的需求或需要进一步的帮助,请随时告诉我!