分类 Linux 相关 下的文章

为什么 wireshark 里面看到的 tcp 包那么长

我们经常用 wireshark 去分析 tcp dump, 有时候, 我们会看到有些不符合我们直觉的事情, 比如下面的截图中, 你看到这个 tcp 包竟然有 36200 字节.
tcpSoLong.png

tcp 包的长度是由这个 tcp 连接在建立的时候, 2 端协商(通知更合适)而来的, 取其中小的值. 通常情况下我们接触到的都是以太网, 所以这个长度(MSS:maximum segment size)基本是 MTU(maximum transmission unit) 1500 - 20 -20 = 1460 字节. 如下图所示:
syn_mss.png

- 阅读剩余部分 -

lsof 命令

lsof 是 *unx (Linux/Unix) 上的查看打开文件的命令. 由于在 Unix 体系中大部分都是文件, 所以它能查看打开的磁盘文件, 网络 socket, named pipe, 其他块设备(device)文件, 字符设备文件.
比如查看是哪个进程占用了某个端口:

sudo lsof -i :8080

比如查看某个进程打开的所有文件, 看看是不是有日志文件:

sudo lsof -p 30569

其他常见的命令例子:

lsof #显示所有打开的, 有时候你要加 sudo 去查看所有
lsof -u apache #显示用户 apache 打开的所有文件
lsof -i #显示打开的 Internet socket 文件
lsof -i 4 # IP v4
lsof -i 6 # IP v6
lsof -p <pid> #特定某个进程打开的文件
lsof -p ^<pid> #排除 非某个进程打开的所有文件
lsof -t /var/log/my.log # 显示打开这个文件的所有进程
lsof +D /var/log  #显示打开这个目录下目录或文件的所有进程
lsof -i :8080 # 显示打开端口 8080 的进程
lsof -i :80-1024 # 显示 80 到 1024 之间端口的所有进程
lsof -i udp #显示打开 udp 

netcat(nc) 的各种操作

  1. 扫描端口
    nc -vzu 192.168.0.1 80-90
    nc -v -z www.tianxiaohui.com 90-100
    nc -v -n -z -w 1 192.168.1.2 1-1000

  2. 从客户单传文件到服务端
    服务端先起来
    nc -l 8080 > file.txt
    nc -v remote_server 8080 > localfile.txt

  3. 从服务端传文件到客户端
    nc -4 -v -l 7070 < myfile.txt
    客户端可用浏览器或者 nc 命令
    nc -v www.tianxiaohui.com 7070

  4. 作为代理

    单向代理: nc -l 12345 | nc www.google.com 80
    双向:
    mkfifo backpipe
    nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe

  5. 让任何命令作为网络服务器 (网络后门)

    服务端: nc -4 -l -p 1234 -e /bin/sh
    客户端: nc remote_server 1234
    ls -lah

如果遇到:
close: Bad file descriptor
加上 -4 参数.

使用 telnet, nc, openssl 浏览网站

LM-SHC-16507776:~ xiatian$ telnet www.tianxiaohui.com 80
Trying 156.236.115.130...
Connected to www.tianxiaohui.com.
Escape character is '^]'.

GET /about.html HTTP/1.1
Host: www.tianxiaohui.com

HTTP/1.1 400 Bad Request
Date: Sat, 02 Nov 2019 03:18:30 GMT
Server: Apache
Accept-Ranges: bytes
Connection: close
Content-Type: text/html


printf "GET /index.html HTTP/1.0\r\nHost: www.tianxiaohui.com\r\n\r\n" | nc www.tianxiaohui.com 80

使用 openssl 浏览 https 的
LM-SHC-16507776:~ xiatian$ openssl

OpenSSL> s_client -crlf -connect www.bing.com:443 -quiet

depth=2 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=1 C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, OU = Microsoft IT, CN = Microsoft IT TLS CA 2
verify return:1
depth=0 CN = www.bing.com
verify return:1

GET / HTTP/1.1
Host:www.bing.com

HTTP/1.1 302
Cache-Control: private
Content-Length: 137
Content-Type: text/html; charset=utf-8
Location: https://cn.bing.com/
Date: Sat, 02 Nov 2019 03:11:59 GMT

Object moved
Object moved to https://cn.bing.com.

GET / HTTP/1.1
Host:cn.bing.com

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 114805

诊断 puppet agent 导致的 CPU 使用率非常高的问题

问题描述:
看到有一台机器表现很突出, CPU 使用率比其它高, 干活却没比其它机器多:
PerfMon.png

搜集数据:
登录机器, 查看各个进程 CPU 使用情况: 以 root 运行的 puppet 就是那个嫌疑犯
top -i
top.png
嫌疑犯近照:
ps -auxwwww
pdetail.png


因为 strace 只针对一个线程, 如果一个进程里面有多个线程, 首先要查出是哪个线程使用 CPU 比较高, 否则可能出错.
使用 top -i 命令出来之后, 输入 大写的 H 则能进入 thread 模式.
或者 使用 top -H -p
threads.png

然后在使用 strace 命令

诊断:
使用 strace 诊断, 发现较短时间内狂调 sched_yield, google 一下, 发现已知问题
sudo strace -p 14194 -c
strace.png
https://bugs.launchpad.net/debian/+source/ruby2.3/+bug/1834072

修复:

  1. 重启能临时解决
  2. 升级 ruby 能长期解决