cat /tmp/f | /usr/bin/zsh -i 2>&1 | nc -vl 127.0.0.1 8081 > /tmp/f
端口探测
nc -vz -w1 192.168.50.10 3322
nc -vz -w1 192.168.50.10 3300-3333
双向转发 - 交叉配对
mkfifo nc_pipe
nc -l -p 1234 < nc_pipe | nc 127.0.0.1 5678 > nc_pipe
传输文件
nc -l -p xxx > file2
nc x.x.x.x xxx < file1
可以和tar配合来搞定目录
nc -vl 8080 | tar -xzvf -
tar -czvf - snic_dpdk | nc 172.29.47.131 8080 -v
开启后门
nc -lk -p xxx -e /bin/sh
ref
https://program-think.blogspot.com/2019/09/Netcat-Tricks.html?m=1
performance test
construct random file
dd if=/dev/urandom of=data.bin bs=1M count=1024
硬件配置atom: 2个核
主要为了看看 内核网络协议栈的开销大不大
2个进程,2个核
time nc -N localhost 5001 < xxx.img
nc -l 5001 > /dev/null
4个进程,2个核
213MB
dd if=/dev/zero bs=1MB count=10000 | nc localhost 5001
nc -l 5001 | pv -W > /dev/null
nc xxx 5001 < data.bin
nc -l 5001 > /dev/null
dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct
dd if=/dev/zero of=data.bin bs=1M count=1000 oflag=direct
on soc
136MB
磁盘IO
协议栈开销
内存带宽
dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct
dd if=/dev/zero of=data.bin bs=1M count=1000 oflag=direct
768MB 1.4s
dd if=/dev/zero bs=1M count=1000 | nc localhost 5001
1.1s
time nc localhost 5001 < data.bin
1.7GB
dd if=/dev/zero of=/dev/shm/A bs=2M count=1024
网络和io可能重叠,然后串行 比如 ssh + networkIO
sysctl -A | grep “tcp.*mem”
阻塞会导致死锁 收发包队列是有限的。应对方式:TCP也要消息分包,然后要先本地存储,不要收完马上发。因为对端还在发,你发过去不接受,会堆积在收包缓冲队列。
read buffer 不为空时,close会触发rst
一个连接被rst后,继续socket write 会触发SIGPIPE信号.默认行为是杀死进程.
signal(SIGPIPE, SIG_IGN);
NAGLE算法和tcp delay ack导致大延时 => 小数据包的 write-write-read 过程
发送首包小数据packet, 后续包就要等待这个首包ack后才能发送,也就是1个延时RTT
建议默认关闭nagle
sudo tcpdump -i eth0 -n tcp port 5001
适用服务器异常挂死后,重启,监听端口就不会提示 端口正在使用中。
使得 可以 重复监听一个端口,这样就可以fork进程来监听
thread per connection 节约了一个系统调用epoll_wait,等待描述符就绪
read间隙 会不会 丢掉buffer
阻塞也是一个速率匹配的过程,消费者没消费,生产者也会停滞的。
读写共用一个线程。
阻塞容易影响其他方向的IO
noblocking write 不会阻塞read了
block io can cause dead lock
ab -k -n 100000 http://localhost:5001/
页表
还是要细致看看书
视频不好回溯,看完视频 就忘,还不好回溯。