Tcpdump命令参数详解
tcpdump的选项介绍:
tcpdump[ -adeflnNOpqStvx ] [-c 数量] [-F 文件名] [-i 网络接口] [-r 文件名] [-s snaplen] [-T 类型] [-w 文件名] [表达式]
各参数说明如下:
-a 将网络地址和广播地址转变成名字;
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。tcpdump -b arp 将只显示网络中的arp即地址转换协议信息;
-c 在收到指定数目的包后,tcpdump就会停止;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-l 使标准输出变为缓冲行形式,如tcpdump -l >tcpcap.txt将得到的数据存入tcpcap.txt文件中;
-n 不进行IP地址到主机名的转换;
-N 不打印出默认的域名
-nn n不进行端口名称的转换;
-O 不进行匹配代码的优化,当怀疑某些bug是由优化代码引起的, 此选项将很有用;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-s 抓取数据包时默认抓取长度为68字节。加上 -s 0 后可以抓到完整的数据包
-t 在输出的每一行不打印UNIX时间戳,也就是不显示时间;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp;
-tt 打印原始的、未格式化过的时间;
进入vim
命令 | 描述 |
---|---|
vim filename | 打开或新建文件,并将光标置于第一行首 |
vim +n filename | 打开文件,并将光标置于第n行首 |
vim + filename | 打开文件,并将光标置于最后一行 |
vim +/pattern filename | 打开文件,并将光标置于第一个与pattern匹配的串处 |
vim -r filename | 在上次使用vim编辑时发生系统崩溃,恢复filename |
vim filename…filenamen | 打开多个文件,依次编辑 |
vim配置
命令 | 描述 |
---|---|
all | 列出所有选项设置情况 |
:set number/set nonumber | 显示/不显示行号 |
set ruler/set noruler | 显示/不显示标尺 |
:set hlsearch | 高亮显示查找到的单词 |
:set nohlsearch | 关闭高亮显示 |
移动光标
命令 | 描述 |
---|---|
) | 光标移至句尾 |
( | 光标移至句首 |
{ | 光标移至段落开头 |
} | 光标移至段落结尾 |
0 | 光标移至当前行首 |
$ | 光标移至当前行尾 |
gg | 移到第一行 |
G | 移到最后一行 |
屏幕滚动
命令 | 描述 |
---|---|
Ctrl + u | 向文件首翻半屏 |
Ctrl + d | 向文件尾翻半屏 |
Ctrl + f | 向文件尾翻一屏 |
Ctrl + b | 向文件尾翻一屏 |
删除命令
命令 | 描述 |
---|---|
x/X | 删除一个字符,x删除光标后的,而X删除光标前的 |
dw | 删除一个单词(删除光标位置到下一个单词开始的位置) |
dnw | 删除n个单词 |
do | 删至行首 |
d$ | 删至行尾 |
shift+j | 删除行尾的换行符,下一行接上来了 |
复制粘贴
命令 | 描述 |
---|---|
p | 粘贴用x或d删除的文本 |
yy | 复制一行 |
y$ | 复制当前光标至行尾处 |
搜索及替换
命令 | 描述 |
---|---|
:g/p1/s//p2/c |
将文件中所有p1均用p2替换, c表示需要确认,g表示执行 |
:1,$s/p1/p2/g |
在全文中将p1替换为p2 |
n1,n2 s/p1/p2/g |
将第n1行至n2行中所有p1均用p2替代 |
:s/p1/p2/g |
将当前行中所有p1均用p2替代 |
什么是二层与三层交换机?
通常情况下,OSI模型分为七层:应用层,表示层,会话层,传输层,网络层,数据链路层和物理层。
二层交换机工作于OSI模型的二层(数据链路层),故而称为二层交换机,主要功能包括物理编址、错误校验、帧序列以及流控。 而三层交换机位于三层(网络层),是一个具有三层交换功能的设备,即带有三层路由功能的二层交换机,但它是二者的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。
- 二层交换机根据MAC地址转发
- 三层根据IP地址转发
三层交换机就是具有部分路由器功能的交换机,工作在OSI网络标准模型的三层:网络层,目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。
三层交换机可以执行静态路由和动态路由。这意味着三层交换机同时具有MAC地址表和IP路由表,并且还处理VLAN内通信以及不同VLAN之间的数据包路由。仅添加静态路由的交换机称为弱三层交换机。除路由数据包外,三层交换机还包括一些功能,这些功能需要能够理解进入交换机的数据的IP地址信息,例如基于IP地址标记VLAN流量,而不是手动配置端口。三层交换机的功率和安全性得到了提高。
总之,二层交换机用于小型的局域网络,它的快速交换功能、多个接入端口和相对便宜的价格为小型网络用户提供了很完善的解决方案。而三层交换机的最重要的功能是加快大型局域网络内部的数据的快速转发,加入路由功能也是为这个目的服务的
参考:https://zhuanlan.zhihu.com/p/379870366
https://developer.aliyun.com/article/799104
还可以看看这个
yum -y install libguestfs-tools
要设置root密码,请使用以下命令:
virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --root-password password:123456
[ 0.0] Examining the guest ...
[ 1.9] Setting a random seed
[ 1.9] Setting passwords
[ 6.8] Finishing off
注:
CentOS-7-x86_64-GenericCloud.qcow2是要修改图像的名称。
123456是为root用户设置的密码。
基本思路: rpm包没有修改工具,只能是把rpm包解压、修改(包括增删)其中的文件,然后重新制作rpm包。
注:制作rpm包,需要原rpm包的spec文件。
所需工具: rpmrebuild 它主要是用来提取原rpm包中的spec文件。
rpmrebuild有如下两种安装方式(建议第1中):
1)下载安装rpmrebuild rpm包
下载地址:
http://rpmfind.net/linux/rpm2html/search.php?query=rpmrebuild
rpm -ivh rpmrebuild-2.11-3.el7.noarch.rpm 安装后,可直接使用 rpmrebuild 命令。
2)下载解压tar包:
下载地址:https://jaist.dl.sourceforge.net/project/rpmrebuild/rpmrebuild/2.15/rpmrebuild-2.15.tar.gz
解压后,使用./rpmrebuild.sh 脚本,和 rpmrebuild命令一样。
rpmbuild 它主要是用来制作rpm包的。
步骤: 0)创建一个临时目录
mkdir -p /root/test_rpm_dir
cp mlnx-ofa_kernel-5.2-OFED.5.2.1.0.4.1.rhel7u3.x86_64.rpm /root/test_rpm_dir
cd /root/test_rpm_dir
1)解压原rpm包
rpm2cpio mlnx-ofa_kernel-5.2-OFED.5.2.1.0.4.1.rhel7u3.x86_64.rpm | cpio -div
2)修改内容
按自己需求修改内容,或增删文件
3)提取原rpm包spec文件
#注:下面命令中的 –spec-only=test.spec 中的test.spec是要保存spec的文件路径(即把提取的spec文件保存为当前路径下的test.spec)。
有两种提取spec文件的方式:
a)从指定的rpm包文件中提取
#注:-p, 即 –package 就是指使用rpm包文件,而不是系统中已安装的rpm。
#注:-n, 即 –notest-install,不要执行一个测试性的安装(do not perform a test install)。
#注:-s,即 –spec-only= ,指只提取创建spec文件(generate specfile only)。
rpmrebuild -p -n -s test.spec mlnx-ofa_kernel-5.2-OFED.5.2.1.0.4.1.rhel7u3.x86_64.rpm
免费(Free ARP)的作用是什么
解决方案 A:主机主动使用自己的IP地址作为目标地址发送ARP请求,此种方式称免费ARP。免费ARP有两个方面的作用:
- 用于检查重复的IP地址 正常情况下应当不能收到ARP回应,如果收到,则表明本网络中存在与自身IP地址重复的地址。
2.用于通告一个新的MAC地址 发送方换了块网卡,MAC地址变了,为了能够在ARP表项老化前就通告所有主机,发送方可以发送一个免费ARP。
arp抓包
执行arping的主机的ip地址为99.0.85.123
- 免费arp
[root@lex ~]# arping -I ens160 99.0.85.123
[root@lex ~]# tcpdump arp -i ens192 host 99.0.85.123 -w arp.pcap
抓包结果
- 一般arp
[root@lex ~]# arping -I ens160 99.0.85.13
[root@lex ~]# tcpdump arp -i ens192 host 99.0.85.123 -w arp.pcap
抓包结果
容器和KVM虚拟化是两种不同的虚拟化技术,它们各有优缺点,适用于不同的场景。
容器
容器是一种轻量级的虚拟化技术,利用操作系统层面的虚拟化实现。每个容器都运行在一个独立的命名空间中,可以看作是进程的一个集合,共享主机操作系统的内核。容器可以快速启动、停止和迁移,占用的资源比KVM虚拟机少,因此更适合部署大规模的分布式应用程序。常见的容器技术包括Docker、LXC等。 优点:
- 轻量级,启动、停止和迁移速度快。
- 占用的资源较少,可以在一台主机上运行大量的容器,提高资源利用率。
- 可以通过镜像来快速构建和部署应用程序。
- 支持自动化部署和管理。
缺点:
- 容器与主机共享内核,安全性稍差。
- 不能运行需要访问硬件设备的应用程序。
- 难以实现真正的隔离,一个容器的问题会影响到其他容器。
KVM虚拟化
KVM虚拟化是一种基于硬件的虚拟化技术,可以在一台主机上运行多个独立的虚拟机。每个虚拟机都有自己的操作系统和内核,因此可以运行各种类型的应用程序,包括需要访问硬件设备的应用程序。KVM虚拟化的性能比容器略低,但提供了更好的隔离和安全性。 优点:
- 提供了完整的虚拟化环境,与主机隔离。
- 支持各种类型的应用程序,包括需要访问硬件设备的应用程序。
- 可以通过快照等功能来方便地管理虚拟机。
缺点:
- 启动、停止和迁移速度较慢。
- 占用的资源较多,同一台主机上只能运行有限的虚拟机。
- 部署和管理虚拟机相对繁琐。
综上所述,容器和KVM虚拟化各有优缺点,应根据实际需求选择合适的虚拟化技术。如果要部署大规模的分布式应用程序,或者需要快速构建和部署应用程序,可以选择容器技术;如果需要隔离和安全性比较高的虚拟化环境,或者需要运行各种类型的应用程序,可以选择KVM虚拟化。
从外面看Pod IP地址之Kubernetes API
kubectl get pod
或者kubectl describe pod
就可以- 如果运行在容器内的进程希望获取该容器的IP,可以通过环境变量的方式来获取IP
spec:
containers:
- name: env-pod
image: busybox
command: ["/bin/sh", "-c","env"]
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
从外面看Pod IP之docker命令
假设容器的ID是6e8147cd2f3d, 一般情况下可以通过以下命令查询容器的IP地址:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 6e8147cd2f3d
但是对于Pod中的容器, 会输出空字符串.原因是Kubernetes调用的是cni插件,而docker的网络实现靠cnm,所以会导致输出有问题.
进入容器内部看Pod IP地址
进到容器的docker命令有docker exec或docker attach,进到容器后再执行ip addr或ifconfig这类常规命令。同一个Pod内所有容器共享网络namespace
,因此随便找一个有ip或者ifconfig命令的容器就能很容易地查询到Pod IP地址。如果Pod内所有容器都不自带这些命令呢?
在我们这个场景下,进入容器网络namespace的作用等价于进入容器,而且还能使用宿主机的ip或者ifconfig命令。
假设Pod的pause容器ID是6e8147cd2f3d,首先获得该容器在宿主机上映射的PID,如下所示:
[root@k8s-node1 ~]# docker inspect --format '{{ .State.Pid }}' 446936c59d95
27804
[root@k8s-node1 ~]# nsenter --target 27804 --net
[root@k8s-node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
3: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether de:9c:6b:6c:b9:ca brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 205.205.0.2/16 brd 205.205.255.255 scope global eth0
valid_lft forever preferred_lft forever
这样就可以输出pause容器的ip地址信息.
混杂模式(英语:promiscuous mode)是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。
一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。网卡的混杂模式一般在网络管理员分析网络数据作为网络故障诊断手段时用到,同时这个模式也被网络黑客利用来作为网络数据窃听的入口。在Linux操作系统中设置网卡混杂模式时需要管理员权限。在Windows操作系统和Linux操作系统中都有使用混杂模式的抓包工具,比如著名的开源软件Wireshark。
python -c "import neutron.version;print(neutron.version.version_info)"