网络故障排查和tcpdump抓包

2024-09-08 11:44

本文主要是介绍网络故障排查和tcpdump抓包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络故障排查:

  1. ping一台服务器不通,你如何排查
    1. 检查本机ip地址设置  网关和dns服务器是否设置正确 或者ip地址冲突
    2. 能否上网 看路由器是否有问题 ping
    3. 服务器是否运行
    4. 服务器禁止ping   防火墙设置 iptables -A INPUT -P ICMP -j DROP
    5. iptables -D INPUT -P ICMP -j DROP
  2. 用户不能访问服务器 怎么排查
      1. 检查用户网络连接
      2. 检查服务器是否运行(数据库 端口nc)
      3. app是否运行 数据库运行等 防火墙
      4. 机房 运营商
  3. 如何知道服务器开启了哪些端口
    1. nc  nmap  nerstat ss lsof
      1. #!/bin/bash
      2. for  i in {0..65535}
      3. do
      4.         (if  ping -c 1 -w 1  192.168.205.141 $i  &>/dev/null ;then
      5.                 echo  $i is used |tee -a ip_use.txt
      6.         else
      7.                 echo  $i is not used|tee -a ip_nouse.txt
      8.         
      9.         fi)&(在后台启动一个子进程)
      10.         wait(父进程执行完代码等待子进程也执行在退出)
      11. done
      12. tee: command |tee 文件名 将输出写入到文件
        1. -a 追加到末尾 不覆盖内容 不写a会覆盖
    2. [root@k8s-master-1 kernel]# lsof -i:22
    3. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    4. sshd      988 root    3u  IPv4  27937      0t0  TCP *:ssh (LISTEN)
    5. sshd      988 root    4u  IPv6  27939      0t0  TCP *:ssh (LISTEN)
  4. 如何知道一个局域网里有哪些ip地址在使用
    1. 遍历ping -c -w 1
    2. fping -g 192.168.1.1-254
    3. 或者for循环
      1. #!/bin/bash
      2. for  i in {1..254}
      3. do
      4.         (if  ping -c 1 -w 1  192.168.205.$i  &>/dev/null ;then
      5.                 echo  192.168.205.$i is used |tee -a ip_use.txt
      6.         else
      7.                 echo  192.168.205.$i is not used|tee -a ip_nouse.txt
      8.         
      9.         fi)&(在后台启动一个子进程)
      10.         wait(父进程执行完代码等待子进程也执行在退出)
      11.         
      12. done

5.如何知道基于王里某个ip是否有冲突

查看输出结果中是否出现了该IP地址,如果有多个条目对应同一个IP地址,则可能存在IP地址冲突。

[root@k8s-master-1 add]# arping -I ens33 192.168.159.136

ARPING 192.168.159.136 from 192.168.159.144 ens33

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.601ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  0.957ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.011ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.022ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  0.986ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  0.991ms

Unicast reply from 192.168.159.136 [00:0C:29:51:46:32]  1.020ms

^CSent 7 probes (1 broadcast(s))

Received 7 response(s)

如何知道目前的网络是否稳定或者速度是否快

ping www.baidu.com  观察ping命令的响应时间和丢包率

[root@k8s-master-1 add]# ping www.baidu.com

PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=128 time=23.7 ms

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=128 time=24.6 ms

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=128 time=28.3 ms

服务器的性能问题

       如何知道目前的服务器各种指标的情况?服务器是否繁忙(load average)?

cpu 网络io  磁盘io(df 挂载  lsblk几块磁盘 iostat) 内存

top  htop  默认基于cpu使用率排序

P(processor处理器)  M  (基于内存排序)

[root@k8s-master-1 ~]# top

top - 15:09:18 up  5:37,  2 users,  load average: 0.84, 1.34, 1.51

Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie

%Cpu(s):  3.4 us,  3.4 sy,  0.0 ni, 89.7 id,  0.0 wa,  0.0 hi,  3.4 si,  0.0 st

KiB Mem :  3861300 total,   395440 free,  1161244 used,  2304616 buff/cache

KiB Swap:        0 total,        0 free,        0 used.  2447520 avail Mem

PR 进程的优先级 20- -19  默认都为20

NI  -》nice  值 可通过修改ni 修改PR 默认0 值越小优先级越高

us --》user processes  用户态进程消耗的cpu的资源的比例

sy --》system processes(内核态的进程消耗的cpu的资源的比例)

id  -->idle  空闲

hi  --》hard interrupt   --》硬件导致的程序中断

si  --》soft interrupt   --》软件导致的程序中断

shift+>    top命令翻页

nice -n -10 vim feng.txt  启动新进程设置nice

renice -5 -p(进程号) 1234  每次拿20加减数字 重新调整以运行的进程的优先级

CFS 完全公平调度算法  2516

时间片cd /proc/sys/kernel/sched_rr_timeslice_ms  100ms

按f可以调出可供选择的字段(列)field

有*会显示出来   上下方向键选中后 敲空格就会加上*  然后可top看到

P  last used cpu                   

h  获得帮助 help  k 杀进程 r 重定义nice值

load average:0.25 1.64 2.35

过去一分钟 五分钟 十五分钟 系统平均负载 有多少进程在cpu run

系统平均负载是处于可运行状态或不可中断状态的 正在等待的进程的平均数量

是按照1个cpu核心算的   一般一到五 都还不是很忙 最大值 核心数*5

cache : disk—cache-memory 读

buffer:memory-buffer-disk  写

util:繁忙度  一秒中有多少百分比的时间用于I/O操作。     

[root@k8s-master-1 kernel]# iostat -x   监控系统 I/O 设备负载以及 CPU 使用情况

  • -c: 显示CPU使用情况。
  • -d: 显示磁盘I/O统计信息。
  • -x: 显示详细的磁盘I/O统计信息。
  • -k: 以KB为单位显示I/O信息。
  • -m: 以MB为单位显示I/O信息。
  • -t: 显示系统负载平均值。

Linux 3.10.0-1160.119.1.el7.x86_64 (k8s-master-1)        2024年09月07日        _x86_64_ (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           4.03    0.00    5.44    0.06    0.00   90.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

scd0              0.00     0.00    0.00    0.00     0.20     0.00   114.22     0.00    2.22    2.22    0.00   1.83   0.00

sda               0.01     0.09   18.94    7.29  1000.90   104.88    84.30     0.05    2.12    2.66    0.72   0.33   0.86

dm-0              0.00     0.00   18.67    7.38   994.28   104.08    84.33     0.06    2.14    2.69    0.74   0.33   0.85

dm-1              0.00     0.00    0.02    0.00     0.41     0.00    48.19     0.00    0.31    0.31    0.00   0.19   0.00

dm-2              0.00     0.00    0.03    0.00     0.22     0.40    45.66     0.00    0.41    0.28    4.75   0.29   0.00

qps 每秒钟的查询次数

tps 每秒钟传输次数

rrqm/s   wrqm/s 每秒合并的读写请求数量

r/s     w/s 每秒完成的读写操作数

glances 全能查看各项指标

看机器内存 free -h

[root@k8s-master-1 kernel]# nc -z(端口扫描 只发送请求不发送给数据) -w(超时时间s) 1 120.24.223.108 443

Connection to 120.24.223.108 443 port [tcp/https] succeeded!

-p 指定监听端口

  1. 如何禁止别人访问我们的web服务或者数据库服务?
    1. iptables
  2. 如何禁止某个ip地址或者某个网段的ip访问服务器

如何抓包分析?

tcpdump

tcpdump -i ens33 -nn host 192.168.159.144 and port 22

tcpdump -i ens33 -nn src host 192.168.159.144 and dst port 22

tcpdump -i ens33 -nn src host 192.168.159.144 and \(dst port 22 or sst port 80 \) -vv

tcpdump -i ens33 tcp and dst port 22 and src net 192.168.159.0/24

tcpdump -i ens33  -p icmp -nn

-I interface指定抓包的接口

-n 以数字形式显示 不显示域名 number 不进行dns解析

-nn 不进行任何形式的名称解析

-vv显示更加详细信息

-F 清除规则 默认规则不会改

-v 显示匹配

-s 指定源ip  -d 指定目的ip

host <hostname_or_ip>: 捕获与指定主机名或IP地址相关的数据包。

net <network>: 捕获与指定网络相关的数据包。

port <portnum>: 捕获与指定端口相关的数据包。

src <hostname_or_ip>: 捕获源地址是指定主机名或IP地址的数据包。

dst <hostname_or_ip>: 捕获目的地址是指定主机名或IP地址的数据包。

-i 数据进入的接口 -o 数据出去的接口

ipvs有规则链chain(对数据包进行过滤处理): input,output,forward(处理转发数据包),postrouting(在进行路由选择后处理数据包),prerouting  不指定的话默认所有链

filter表的INPUT、OUTPUT、FORWARD链;

       nat表的PREROUTING、POSTROUTING链

如果转发数据(充当路由器),路径为prerouting->forword->postrouting

     规则表:raw表,mangle表,nat表(网络地址转换),filter表(数据过滤 默认) 表存放链,链放规则

哈希函数:任意个字符的输入经过哈希函数处理后得到固定长度长度字符串的输出

          输出的字符串称呼hash值(摘要值),ipvs采用了所以支持大规模,查找速度快

iptables  [-t 表名默认filter]  管理选项  [链名]  [条件匹配]  [-j 目标动作或跳转] -A INPUT

[root@localhost ~]# iptables -t filter -A(在末尾加apppend) INPUT -p(协议) tcp -j(jump跳转) ACCEPT (放行)DROP(丢弃数据包)REJECT(拒绝)LOG

[root@localhost ~]# iptables -I(insert在第一条插入) INPUT -p udp -j ACCEPT

[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT

[root@localhost ~]# iptables -P(policy指定规则链默认策略) INPUT DROP

iptables -L -n -v 看全部详细

-N 创建自定义链 -X 删除自定义链

[root@localhost ~]# iptables -L(list) INPUT --line-numbers(--line显示编号)-v

Chain INPUT (policy DROP)

num  target     prot opt source               destination

1    ACCEPT     udp  --  anywhere             anywhere

2    ACCEPT     icmp --  anywhere             anywhere

3    ACCEPT     tcp  --  anywhere             anywhere

 -F 清除filter表所有规则  

-i(在开始insert) INPUT  --dport --sport

[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

端口匹配

使用“--sport 源端口”、“--dport 目标端口”的形式

采用“端口1:端口2”的形式可以指定一个范围的端口

只允许访问本机80  443 22 3306端口 其他的禁止访问

[root@web-3 ~]# cat sc.sh

#!/bin/bas

/usr/sbin/iptables   -F -t filter

/usr/sbin/iptables  -A  INPUT  -p icmp  -j SANCHUANG

/usr/sbin/iptables  -A  INPUT  -p tcp  -j SANCHUANG

#在SANCHUANG自定义链里添加规则

/usr/sbin/iptables  -A  SANCHUANG  -p icmp  -j LOG

/usr/sbin/iptables  -A  SANCHUANG  -p icmp  -j DROP

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 80  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 443  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 3306  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 22  -j ACCEPT

/usr/sbin/iptables  -A  SANCHUANG  -p tcp  --dport 6443  -j ACCEPT

/usr/sbin/iptables -P INPUT  DROP

 自定义链是如何使用的:docker和k8s的时候 背后都会自动取创建相关的自定义和规则

[root@web-1 ~]# iptables -A INPUT -p icmp -j SANCHUANG

[root@web-1 ~]# iptables -A INPUT -p tcp -j SANCHUANG

这篇关于网络故障排查和tcpdump抓包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

MYSQL事务死锁问题排查及解决方案

《MYSQL事务死锁问题排查及解决方案》:本文主要介绍Java服务报错日志的情况,并通过一系列排查和优化措施,最终发现并解决了服务假死的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录问题现象推测 1 - 客户端无错误重试配置推测 2 - 客户端超时时间过短推测 3 - mysql 版本问

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Arthas问题排查工具

简介 Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码;实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 。支持JDK 6+,支持Linux/Mac/Windows。这个工具真的很好用,而且入门超简单,十分推荐。 使用场景 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没

F12抓包06-4:导出metersphere脚本

metersphere是一站式的开源持续测试平台,我们可以将浏览器请求导出为HAR文件,导入到metersphere,生成接口测试。 metersphere有2种导入入口(方式),导入结果不同:         1.导入到“接口定义”:自动生成接口API和单接口case(接口自动去重;每个请求生成不同case,重复的请求生成重复的case,名称自动加数字后缀,自动与接口关联)。

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。  static void Main()         {             int killer = 0;             fo

linux运维排查常用命令(开发专享)

cd: 进入到某个目录下 cd hikvision ll:详细展示该目录下有的文件 ll su 用户名:切换用户名 例子: su root 根据字符串在文件中查找信息:Grep –a –i 字符串 文件名 例子: grep -a -i 'indexCode=4a28a0dfe0244c0cbabcd9b2c3b60327' nms.nmsweb.debug.log cat 文

一次关于生产环境服务无故宕机的排查过程

故事的开始 这个故事是在一年之前,当时我们的系统运行在客户的k8s环境上。然后很神奇的是每个月底我们都会服务宕机,当然我们开启了多个实例。当时的容器线条就像心跳图一样(或许有些描述的不太准确,我没有找到当时那个像心电图一样的容器资源监控图)。 第一次的排查 当时我们还是很有信心去解决这个问题的。由于每个月的月底都是业务使用的高峰时段,也就是说,从表象上来看,qps一高,容器就挂。 业务日