网络
网络接口
eth0 有线以太网接口
eth0 提供物理网络连接
作用: 主机的 物理有线网卡,用于连接外部网络(如路由器、交换机)。 通常分配 主 IP 地址(如 192.168.1.100),是主机与外界通信的主要通道。
典型场景: 服务器通过 eth0 提供网络服务(如 Web、SSH)。 家用电脑通过 eth0 连接宽带。
lo 本地回环接口
lo 提供本地网络连接, 虚拟网络接口保障本地通信。 IP 固定为 127.0.0.1(IPv4)或 ::1(IPv6) 即使没有物理网络(如拔掉网线),本地服务仍可通过 lo 相互访问
docker0(Docker 默认网桥)
Docker 创建的 虚拟网桥,默认 IP 为 172.17.0.1。 运行 Docker 容器时,容器通过 docker0 获取 IP(如 172.17.0.2)并访问外网。
docker0 和 br-* 是 Docker 为容器创建的虚拟网络,实现:容器间通信(通过网桥)。 容器访问外网(通过 NAT 或主机网络)
停止 Docker 服务后,网桥会自动消失
# 查看所有网络端口
ifconfig
# or
ip addr show # 或简写为 ip a
# 查看接口信息
ip addr show eth0
# 启动/禁用网卡
sudo ifconfig eth0 up # 启用网卡
sudo ifconfig eth0 down # 禁用网卡
# 检查路由表
ip route show
操作调试网络
ping 测试
traceroute
用于显示数据包到主机间的路径。 traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
追踪数据包到达目标主机的路径(每跳路由器 IP),发送 TTL 递增的 ICMP/UDP 包,记录路径响应。 TTL:time to live,生存时间,数据包在路由中经过的跳数,超过最大跳数则丢弃。
curl
curl 是一个命令行工具,用于从 URL 下载文件。 (Client URL)是在 Linux/Unix 系统中传输数据。支持 HTTP、HTTPS、FTP、SFTP 等协议
核心参数:
- -X 指定 HTTP 方法 curl -X POST https://example.com
- -d 发送 POST 数据 curl -d "name=John" https://example.com
- -G 将 -d 数据作为 GET 参数发送 curl -G -d "q=keyword" https://search.com
- -H 添加请求头 curl -H "Content-Type: application/json" https://api.com
- -I 只获取头部信息 curl -I https://example.com
- -L 跟随重定向 curl -L https://short.url
- --limit-rate 限制传输速度 curl --limit-rate 100K https://largefile.com
- -o 将输出保存到文件 curl -o output.html https://example.com
- -O 使用远程文件名保存 curl -O https://example.com/file.zip
- -s 静默模式(不显示进度) curl -s https://api.com/data.json
- -v 显示详细通信过程 curl -v https://example.com
wget
功能强大的非交互式网络下载工具,名称来源于 "World Wide Web" 和 "get" 的组合。它支持通过 HTTP、HTTPS 和 FTP 协议下载文件,具有断点续传、递归下载等实用特性
常用参数:
* -O <文件名> 指定保存文件名 wget -O myfile.zip https://example.com/file.zip
* -P <目录> 指定下载目录 wget -P ~/downloads https://example.com/file.zip
* -c 断点续传 wget -c https://example.com/bigfile.iso
* -b 后台下载 wget -b https://example.com/largefile.mp4
* -r 递归下载 wget -r https://example.com/directory/
* -l <深度> 设置递归深度 wget -r -l 2 https://example.com/
注意:
- -O 和 -P 不能同时使用
- 断点续传:断点续传功能下载一个大文件,中断后重新连接继续下载,避免重复下载。
- 注意 递归深度一般设置1,
wget -r -l 1 URL_ADDRESS.com/path/否则会下载所有服务器目录下的所有文件,设置深度1,代表只下载当前path下的所有文件,这很实用。
ss
socket statistics ,查看套接字统计信息的命令,功能类似于 netstat,但速度更快,提供更详细的网络连接状态信息
技巧:
- 查看所有活跃连接
ss -tunap - 只看监听中的端口
ss -lnt - 查看网络状态
ss -s
参数说明:
- -a, --all:显示所有的套接字,包括监听和非监听的。
- -t, --tcp:仅显示 TCP 套接字。
- -u, --udp:仅显示 UDP 套接字。
- -l, --listening:仅显示监听状态的套接字 端口。
- -p, --processes:显示与套接字关联的进程信息。
- -n, --numeric:以数字形式显示地址,而不是解析成主机名。
- -r, --resolve:将主机名解析为 IP 地址。
- -s, --summary:显示套接字的摘要信息。
- -4:仅显示 IPv4 套接字。
- -6:仅显示 IPv6 套接字。
- -i, --info:显示详细的内部信息。
- -o, --options:显示 TCP 计时器信息。
- -K, --kill:通过 ID 杀死指定的 socket。
- -f, --family=FAMILY:指定协议族(如 inet, inet6, unix, link)。
- -m, --memory:显示每个套接字使用的内存。
- -H, --no-header:不显示标题行。
- -v, --verbose:显示详细的输出
tcpdump 用于捕获和分析网络数据包
网络抓包分析器
tcpdump -i eth0 port 80 -w http.pcap # 抓取80端口流量存文件
iftop
实时显示网络接口的流量 同理推荐 top htop(top 升级版 可交互top) iotop
dig
DNS 查询,强于 nslookup 安装:apt install bind9-dnsutils
监控扫描网络
- nc(Netcat)网络测试的瑞士军刀
- nmap 用于网络扫描和安全审计
nmap -sS 192.168.1.0/24 # SYN扫描(快速发现主机)
nmap -p 22,80,443 10.0.0.1 # 扫描指定端口
nmap -O --osscan-guess 10.0.0.5 # 猜测操作系统
nmap -sV --script=http-title example.com # 识别服务版本+执行脚本
nc -zv 192.168.1.100 1-100 # 端口扫描(1-100端口)
nc -l 8080 > file.txt # 监听端口接收数据存文件
echo "GET /" | nc baidu.com 80 # 手动发送HTTP请求
nc -u 8.8.8.8 53 # UDP模式连接DNS服务器
lsof
列出当前系统打开的所有文件及相关进程信息。在 Linux 中,"一切皆文件"的理念意味着 lsof 不仅能显示常规文件,还能显示网络连接、设备文件、管道和套接字等
参数:
- -a 使用 AND 逻辑组合多个条件
- -c <进程名> 显示指定进程打开的文件
- -d <文件描述符> 显示指定文件描述符的文件
- -i 显示网络连接相关信息
- -n 不解析主机名(显示 IP 地址)
- -P 不解析端口名(显示端口号)
- -p <PID> 显示指定进程 ID 打开的文件
- -u <用户名> 显示指定用户打开的文件
- +D <目录> 递归显示目录下被打开的文件
- -t 仅输出进程 ID(适合脚本使用)
lsof -p 1234 # 查看 PID 为 1234 的进程打开的文件
lsof -c nginx # 查看所有 nginx 进程打开的文件
lsof -i # 查看所有网络连接
lsof -i :80 # 查看所有使用 80 端口的连接
lsof -i TCP # 查看所有 TCP 连接
lsof | grep deleted # 找到被删除的文件和进程
lsof -i -P -n # 列出所有端口占用
