Linux中的conntrack命令深入解析
在Linux网络管理和监控领域,conntrack
命令是一个强大的工具,它提供了对netfilter连接跟踪系统的直接访问🔍。这篇文章将深入探讨conntrack
的由来、底层原理、参数意义,以及其常见用法,并对返回结果的每个字段进行详细解释。
1. conntrack的由来📜
conntrack
命令源于Linux的netfilter项目🌐,这是一个内置于Linux内核中的网络包处理模块。Netfilter支持各种网络相关任务,如包过滤(防火墙)🔥、网络地址转换(NAT)🔄和连接跟踪。conntrack
工具最初设计的目的是为了管理和监视netfilter的连接跟踪系统,这个系统记录了所有经过防火墙的网络连接的状态信息。
2. 底层原理🔬
conntrack
工具的底层原理基于netfilter的连接跟踪表📈,该表位于内核空间。每当网络包经过netfilter时,连接跟踪系统会检查包的信息,如源IP地址、目的IP地址、传输层协议(TCP/UDP)、端口等,并据此更新内部的连接跟踪表。这个表包含了所有活跃连接的状态信息,例如是否已建立连接、连接是否已关闭等。
3. 参数解释📋
conntrack
命令支持多种参数,用于执行不同的操作✅:
-L, --list
:列出连接跟踪表中的所有条目。-G, --get
:获取单个连接跟踪条目的信息。-D, --delete
:从连接跟踪表中删除条目。-I, --create
:创建一个新的连接跟踪条目。-U, --update
:更新已存在的连接跟踪条目。-E, --event
:监听连接跟踪事件。
4. conntrack返回结果解释
当你运行conntrack -L
时,会看到类似以下的输出:
tcp 6 431999 ESTABLISHED src=192.168.1.2 dst=93.184.216.34 sport=34567 dport=80 [UNREPLIED] src=93.184.216.34 dst=192.168.1.2 sport=80 dport=34567
每个字段的含义如下📝:
-
协议:表示连接使用的协议,如
tcp
、udp
等。 -
协议号:表示连接使用的协议号,如
6
代表tcp连接、17
代表udp连接等。 -
TCP状态计数器,可以理解为超时时间(Timeout):表示连接条目在连接跟踪表中保持的剩余时间(秒)。当这个时间到达0时,条目将被自动从跟踪表中移除。
- 对于TCP连接,该数字表示连接跟踪条目在内核连接跟踪表中的剩余时间。这个计时器的值会根据连接的状态(如ESTABLISHED、TIME_WAIT等)和配置的超时设置变化。计时器的值为零时,连接跟踪条目会从表中删除。
- 对于非TCP连接(如UDP),因为UDP是无连接的,所以这个计数器代表连接跟踪条目在没有任何新的数据包更新的情况下,还可以在连接跟踪表中存活多长时间。
-
连接状态:描述TCP连接的当前状态。
ESTABLISHED
:已建立连接TIME_WAIT
:等待足够的时间以确保远程TCP接收到连接终止请求的确认)CLOSE_WAIT
:CLOSE_WAIT状态表示对端(远程主机)已经关闭了连接的一半(发送了一个FIN包),并且本地端(你的计算机)已经接收到这个关闭请求,但是本地应用程序还没有关闭(或者说还没有调用close来关闭连接)。简单来说,CLOSE_WAIT状态意味着TCP连接在等待本地应用程序去关闭连接。SYN_SENT
:客户端已发送一个连接请求(SYN包)给服务器,并等待服务器的确认。这表示客户端已经开始了TCP三次握手过程SYN_RECE
:服务器收到客户端的SYN包,并回应一个SYN+ACK包,等待客户端的确认。这个状态表示服务器端已经响应了连接请求,正在进行三次握手的第二步。FIN_WAIT_1
:的一方(通常是客户端)决定关闭连接,并发送一个FIN包给对方,等待对方的确认。这标志着连接关闭过程的开始FIN_WAIT_2
:在发送FIN包并收到ACK包后,连接进入FIN_WAIT_2状态。在这个状态下,连接的关闭一方等待对方的FIN包。CLOSE_WAIT
:当一方收到另一方的FIN包,即对方请求关闭连接时,它会发送一个ACK包作为回应,并进入CLOSE_WAIT状态。在这个状态下,等待本地应用程序关闭连接。CLOSING
:在同时关闭的情况下,当双方几乎同时发送FIN包时,连接会进入CLOSING状态,表示双方都在等待对方的FIN包的确认。LAST_ACK
:当处于CLOSE_WAIT状态的一方发送FIN包,并等待对方的最终ACK包时,连接进入LAST_ACK状态。TIME_WAIT
:在收到对方的FIN包并发送ACK包后,连接进入TIME_WAIT状态。这个状态持续一段时间(2倍的MSL,最大报文生存时间),以确保对方收到了最终的ACK包。这也允许老的重复数据包在网络中消失。CLOSED
:连接完全关闭,两端都释放了连接的资源。
-
源地址(src)、目的地址(dst):发送数据包的主机的IP地址。
src=源IP dst=目的IP
:表示数据包的源和目的IP地址。 -
源端口(sport)、目的端口(dport):发送数据包的主机的端口号。
sport=源端口 dport=目的端口
:表示数据包的源和目的端口号。 -
[UNREPLIED] / [ASSURED]:
[UNREPLIED]
:表示从源到目标的连接请求尚未收到回复。[ASSURED]
:表示连接已经被确认,不会因为短时间内没有数据包而被清除。
-
Mark(标记):
mark
字段用于表示特定的连接跟踪条目被打上的标记(或称为标签)- 这个标记是一个整数值,通常由防火墙规则(如iptables)设置,用于对特定的数据包或连接进行分类或执行特定的处理逻辑。
- 可能的取值:
mark
的取值范围是从0
到4294967295
(即2^32-1),其中0
通常表示未被标记的连接。非零的值则根据实际的防火墙规则和策略而定,不同的值可以代表不同的分类或处理逻辑。例如,在某些配置中,mark
可以用来区分经过VPN的流量、被特定规
-
Use(使用):
use
字段表示当前有多少个内核组件正在引用这个连接跟踪条目。简而言之,它表明这个连接跟踪条目的“使用度”或“引用计数”。- 可能的取值:
use
的取值是一个正整数,起始值至少为1
,表示至少有一个引用(即连接跟踪本身)。如果有多个内核组件因为某些原因(如特定的路由或防火墙规则)同时需要跟踪这个连接,use
的值会相应增加。一般而言,大多数情况下use
的值会比较低,除非系统配置导致多个组件需要引用同一个连接跟踪条目。
- 可能的取值:
4.1. 例一:查看所有TCP连接
命令:conntrack -L -p tcp
示例输出:
tcp 6 431999 ESTABLISHED src=192.168.1.100 dst=192.168.1.1 sport=34567 dport=22 [ASSURED] mark=0 use=1
解释:
- 这是一个TCP连接,连接状态为
ESTABLISHED
。 - 连接从源地址
192.168.1.100
的34567
端口到目的地址192.168.1.1
的22
端口。 [ASSURED]
表示连接已经被确认。mark=0 use=1
提供了额外的连接标记和使用信息。
4.2. 例二:查看所有UDP连接
命令:conntrack -L -p udp
示例输出:
udp 17 28 src=192.168.1.100 dst=192.168.1.255 sport=137 dport=137 [UNREPLIED] src=192.168.1.255 dst=192.168.1.100 sport=137 dport=137 mark=0 use=1
解释:
- 这是一个UDP连接,通常用于网络广播。
- 连接尝试从
192.168.1.100
到192.168.1.255
,这是一个局域网广播地址。 [UNREPLIED]
标志表示广播请求尚未收到回复。
4.3. 例三:监听连接跟踪事件
命令:conntrack -E
示例输出:实时显示连接跟踪事件,如新建(NEW)、更新(UPDATE)和销毁(DESTROY)事件。
root@linux-study:~# conntrack -E|head -n 20
[DESTROY] tcp 6 src=192.168.201.109 dst=182.75.23.156 sport=40175 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=40175 [ASSURED][NEW] tcp 6 120 SYN_SENT src=192.168.201.109 dst=182.75.23.156 sport=40175 dport=443 [UNREPLIED] src=182.75.23.156 dst=172.30.3.222 sport=443 dport=40175[UPDATE] tcp 6 60 SYN_RECV src=192.168.201.109 dst=182.75.23.156 sport=40175 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=40175[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.201.109 dst=182.75.23.156 sport=40175 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=40175 [ASSURED][NEW] tcp 6 120 SYN_SENT src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 [UNREPLIED] src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526[UPDATE] tcp 6 60 SYN_RECV src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526 [ASSURED][NEW] tcp 6 120 SYN_SENT src=192.168.201.110 dst=182.75.23.156 sport=6069 dport=443 [UNREPLIED] src=182.75.23.156 dst=172.30.3.222 sport=443 dport=6069[UPDATE] tcp 6 60 SYN_RECV src=192.168.201.110 dst=182.75.23.156 sport=6069 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=6069[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.201.110 dst=182.75.23.156 sport=6069 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=6069 [ASSURED][UPDATE] tcp 6 120 FIN_WAIT src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526 [ASSURED][UPDATE] tcp 6 60 CLOSE_WAIT src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526 [ASSURED][UPDATE] tcp 6 30 LAST_ACK src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526 [ASSURED][UPDATE] tcp 6 120 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=24526 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24526 [ASSURED][NEW] tcp 6 120 SYN_SENT src=192.168.201.109 dst=182.75.23.156 sport=7378 dport=443 [UNREPLIED] src=182.75.23.156 dst=172.30.3.222 sport=443 dport=7378[UPDATE] tcp 6 60 SYN_RECV src=192.168.201.109 dst=182.75.23.156 sport=7378 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=7378[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.201.109 dst=182.75.23.156 sport=7378 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=7378 [ASSURED][UPDATE] tcp
解释:
- 实时监控连接状态变化,有助于诊断网络问题和分析流量模式。
4.4. 例四:解释协议号和TCP状态计数器
考虑以下conntrack
命令的输出示例:
tcp 6 431999 ESTABLISHED src=192.168.1.100 dst=93.184.216.34 sport=34567 dport=80 [ASSURED] mark=0 use=1
udp 17 170 src=192.168.1.100 dst=192.168.1.255 sport=137 dport=137 [UNREPLIED] src=192.168.1.255 dst=192.168.1.100 sport=137 dport=137 mark=0 use=1
在这个示例中:
- 对于TCP连接,
6
是TCP的协议号,431999
是剩余的计时器值(单位是秒),表示该TCP连接跟踪条目将在大约431999秒后从连接跟踪表中移除,除非有新的数据包更新此连接状态。 - 对于UDP连接,
17
是UDP的协议号,170
是剩余的计时器值,表示该UDP连接跟踪条目将在170秒后从连接跟踪表中移除,如果没有新的数据包到达更新状态。
5. 常见用法🛠️
5.1. 列出所有连接
命令:conntrack -L
root@linux-study:~# conntrack -L|head
tcp 6 75 TIME_WAIT src=192.168.201.108 dst=182.75.23.156 sport=12753 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=12753 [ASSURED] mark=0 use=1
tcp 6 29 TIME_WAIT src=192.168.201.104 dst=182.75.23.156 sport=22689 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=22689 [ASSURED] mark=0 use=1
tcp 6 2 CLOSE src=192.168.201.109 dst=182.75.23.156 sport=55566 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=55566 [ASSURED] mark=0 use=1
tcp 6 80 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=3815 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=3815 [ASSURED] mark=0 use=1
tcp 6 37 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=5126 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=5126 [ASSURED] mark=0 use=1
tcp 6 0 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=64894 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=64894 [ASSURED] mark=0 use=1
tcp 6 5 CLOSE src=192.168.201.109 dst=182.75.23.156 sport=15022 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=15022 [ASSURED] mark=0 use=1
tcp 6 12 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=46340 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=46340 [ASSURED] mark=0 use=1
tcp 6 21 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=62983 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=62983 [ASSURED] mark=0 use=1
tcp 6 47 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=63001 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=63001 [ASSURED] mark=0 use=1
root@linux-study:~#
5.2. 过滤特定协议的连接
只显示TCP连接条目命令:conntrack -L -p tcp
root@linux-study:~# conntrack -L -p tcp|head
tcp 6 40 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=40143 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=40143 [ASSURED] mark=0 use=1
tcp 6 46 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=49611 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=49611 [ASSURED] mark=0 use=1
tcp 6 96 TIME_WAIT src=192.168.201.108 dst=182.75.23.156 sport=51938 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=51938 [ASSURED] mark=0 use=1
tcp 6 25 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=45806 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=45806 [ASSURED] mark=0 use=1
tcp 6 10 TIME_WAIT src=192.168.201.108 dst=182.75.23.156 sport=39921 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=39921 [ASSURED] mark=0 use=1
tcp 6 23 TIME_WAIT src=192.168.201.108 dst=182.75.23.156 sport=21268 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=21268 [ASSURED] mark=0 use=1
tcp 6 114 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=64894 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=64894 [ASSURED] mark=0 use=1
tcp 6 59 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=24358 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=24358 [ASSURED] mark=0 use=1
tcp 6 39 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=20256 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=20256 [ASSURED] mark=0 use=1
tcp 6 49 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=51766 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=51766 [ASSURED] mark=0 use=1
root@linux-study:~#
只显示UDP连接条目命令:conntrack -L -p udp
root@linux-study:~# conntrack -L -p udp
udp 17 12 src=192.168.201.101 dst=172.30.3.22 sport=60049 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=60049 mark=0 use=1
udp 17 15 src=192.168.201.103 dst=172.30.3.22 sport=56998 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=56998 mark=0 use=1
udp 17 26 src=0.0.0.0 dst=255.255.255.255 sport=68 dport=67 [UNREPLIED] src=255.255.255.255 dst=0.0.0.0 sport=67 dport=68 mark=0 use=1
udp 17 7 src=172.22.77.130 dst=172.30.3.222 sport=500 dport=500 src=192.168.201.104 dst=172.22.77.130 sport=20500 dport=500 mark=0 use=1
udp 17 23 src=172.30.3.67 dst=172.30.3.255 sport=138 dport=138 [UNREPLIED] src=172.30.3.255 dst=172.30.3.67 sport=138 dport=138 mark=0 use=1
udp 17 24 src=192.168.201.112 dst=169.254.253.1 sport=23965 dport=514 [UNREPLIED] src=169.254.253.1 dst=172.30.3.222 sport=514 dport=23965 mark=0 use=1
udp 17 96 src=192.168.201.102 dst=172.30.3.22 sport=59242 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=59242 [ASSURED] mark=0 use=1
udp 17 16 src=192.168.201.103 dst=172.30.3.22 sport=36173 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=36173 [ASSURED] mark=0 use=1
udp 17 28 src=192.168.201.113 dst=169.254.253.1 sport=10503 dport=514 [UNREPLIED] src=169.254.253.1 dst=172.30.3.222 sport=514 dport=10503 mark=0 use=1
udp 17 2 src=172.30.3.138 dst=172.30.3.255 sport=50195 dport=21027 [UNREPLIED] src=172.30.3.255 dst=172.30.3.138 sport=21027 dport=50195 mark=0 use=1
udp 17 109 src=192.168.201.103 dst=172.30.3.22 sport=46015 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=46015 [ASSURED] mark=0 use=1
udp 17 65 src=192.168.201.101 dst=172.30.3.22 sport=34401 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=34401 [ASSURED] mark=0 use=1
udp 17 35 src=192.168.201.102 dst=172.30.3.22 sport=60903 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=60903 [ASSURED] mark=0 use=1
udp 17 118 src=172.22.77.130 dst=172.30.3.222 sport=4500 dport=4500 src=192.168.201.104 dst=172.22.77.130 sport=24500 dport=4500 [ASSURED] mark=0 use=1
udp 17 4 src=192.168.201.101 dst=91.189.91.157 sport=58566 dport=123 src=91.189.91.157 dst=172.30.3.222 sport=123 dport=58566 mark=0 use=1
udp 17 74 src=192.168.201.103 dst=172.30.3.22 sport=52279 dport=53 src=172.30.3.22 dst=172.30.3.222 sport=53 dport=52279 [ASSURED] mark=0 use=1
udp 17 27 src=192.168.201.110 dst=169.254.253.1 sport=63647 dport=514 [UNREPLIED] src=169.254.253.1 dst=172.30.3.222 sport=514 dport=63647 mark=0 use=1
udp 17 28 src=192.168.201.113 dst=169.254.253.1 sport=60794 dport=514 [UNREPLIED] src=169.254.253.1 dst=172.30.3.222 sport=514 dport=60794 mark=0 use=1
conntrack v1.4.5 (conntrack-tools): 18 flow entries have been shown.
root@linux-study:~#
5.3. 删除指定连接
命令:conntrack -D --src 192.168.1.2
5.4. 显示具有特定状态的连接条目
只显示处于ESTABLISHED状态的TCP连接:conntrack -L -p tcp --state ESTABLISHED
root@linux-study:~# conntrack -L -p tcp --state ESTABLISHED|head
tcp 6 431991 ESTABLISHED src=172.22.70.136 dst=172.30.3.222 sport=43000 dport=443 src=192.168.201.107 dst=172.22.70.136 sport=59443 dport=43000 [ASSURED] mark=0 use=1
tcp 6 431951 ESTABLISHED src=172.30.5.90 dst=172.30.3.222 sport=65130 dport=22 src=172.30.3.222 dst=172.30.5.90 sport=22 dport=65130 [ASSURED] mark=0 use=1
tcp 6 431996 ESTABLISHED src=192.168.201.2 dst=192.168.201.101 sport=37554 dport=6443 src=192.168.201.101 dst=192.168.201.2 sport=6443 dport=37554 [ASSURED] mark=0 use=1
tcp 6 431992 ESTABLISHED src=172.30.3.192 dst=172.30.3.222 sport=54920 dport=443 src=192.168.201.107 dst=172.30.3.192 sport=59443 dport=54920 [ASSURED] mark=0 use=1
tcp 6 431955 ESTABLISHED src=192.168.201.108 dst=182.75.23.156 sport=33186 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=33186 [ASSURED] mark=0 use=1
tcp 6 431999 ESTABLISHED src=192.168.201.109 dst=182.75.23.156 sport=16756 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=16756 [ASSURED] mark=0 use=1
tcp 6 431647 ESTABLISHED src=172.22.3.199 dst=172.30.3.222 sport=60828 dport=22 src=172.30.3.222 dst=172.22.3.199 sport=22 dport=60828 [ASSURED] mark=0 use=1
tcp 6 431998 ESTABLISHED src=192.168.201.108 dst=182.75.23.156 sport=22507 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=22507 [ASSURED] mark=0 use=1
tcp 6 431999 ESTABLISHED src=192.168.201.108 dst=182.75.23.156 sport=17720 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=17720 [ASSURED] mark=0 use=1
tcp 6 431999 ESTABLISHED src=192.168.201.111 dst=182.75.23.156 sport=21704 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=21704 [ASSURED] mark=0 use=1
root@linux-study:~#
5.5. 删除所有处于特定状态的连接
删除所有处于TIME_WAIT状态的连接条目:conntrack -D --state TIME_WAIT
5.6. 过滤并显示来自或发送到特定IP的连接条目
显示所有来自特定IP地址的连接条目:conntrack -L -s 192.168.201.111
root@linux-study:~# conntrack -L -s 192.168.201.111|head
tcp 6 5 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=33961 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=33961 [ASSURED] mark=0 use=1
tcp 6 43 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=11361 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=11361 [ASSURED] mark=0 use=1
tcp 6 75 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=21555 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=21555 [ASSURED] mark=0 use=1
tcp 6 101 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=1895 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=1895 [ASSURED] mark=0 use=2
tcp 6 85 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=19260 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=19260 [ASSURED] mark=0 use=1
tcp 6 15 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=5298 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=5298 [ASSURED] mark=0 use=1
tcp 6 2 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=2753 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=2753 [ASSURED] mark=0 use=1
tcp 6 1 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=53251 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=53251 [ASSURED] mark=0 use=1
tcp 6 114 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=31972 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=31972 [ASSURED] mark=0 use=1
tcp 6 114 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=47645 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=47645 [ASSURED] mark=0 use=1
root@linux-study:~#
显示所有发送到特定IP地址的连接条目:conntrack -L -d 182.75.23.156
oot@linux-study:~# conntrack -L -d 182.75.23.156|head
tcp 6 35 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=50720 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=50720 [ASSURED] mark=0 use=1
tcp 6 111 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=38312 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=38312 [ASSURED] mark=0 use=1
tcp 6 21 TIME_WAIT src=192.168.201.106 dst=182.75.23.156 sport=8688 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=8688 [ASSURED] mark=0 use=1
tcp 6 113 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=54751 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=54751 [ASSURED] mark=0 use=1
tcp 6 103 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=22584 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=22584 [ASSURED] mark=0 use=1
tcp 6 6 CLOSE src=192.168.201.110 dst=182.75.23.156 sport=40445 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=40445 [ASSURED] mark=0 use=1
tcp 6 85 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=46340 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=46340 [ASSURED] mark=0 use=1
tcp 6 66 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=12944 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=12944 [ASSURED] mark=0 use=1
tcp 6 59 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=5575 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=5575 [ASSURED] mark=0 use=1
tcp 6 34 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=47638 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=47638 [ASSURED] mark=0 use=1
root@linux-study:~#
5.7. 使用源或目的端口过滤连接条目
显示所有使用特定源端口的连接条目:conntrack -L -p tcp --sport 22
root@linux-study:~#
root@linux-study:~# conntrack -L -p tcp --sport 57112
tcp 6 61 TIME_WAIT src=192.168.201.108 dst=182.75.23.156 sport=57112 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=57112 [ASSURED] mark=0 use=1
conntrack v1.4.5 (conntrack-tools): 1 flow entries have been shown.
root@linux-study:~#
root@linux-study:~#
显示所有使用特定目的端口的连接条目:conntrack -L -p tcp --dport 443
root@linux-study:~# conntrack -L -p tcp --dport 443|head
tcp 6 102 TIME_WAIT src=192.168.201.110 dst=182.75.23.156 sport=9099 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=9099 [ASSURED] mark=0 use=1
tcp 6 37 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=3253 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=3253 [ASSURED] mark=0 use=1
tcp 6 8 CLOSE src=192.168.201.110 dst=182.75.23.156 sport=21568 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=21568 [ASSURED] mark=0 use=1
tcp 6 39 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=19778 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=19778 [ASSURED] mark=0 use=1
tcp 6 85 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=16067 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=16067 [ASSURED] mark=0 use=1
tcp 6 58 TIME_WAIT src=192.168.201.111 dst=182.75.23.156 sport=43727 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=43727 [ASSURED] mark=0 use=1
tcp 6 54 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=3599 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=3599 [ASSURED] mark=0 use=1
tcp 6 0 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=47476 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=47476 [ASSURED] mark=0 use=1
tcp 6 55 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=62983 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=62983 [ASSURED] mark=0 use=1
tcp 6 119 TIME_WAIT src=192.168.201.109 dst=182.75.23.156 sport=56724 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=56724 [ASSURED] mark=0 use=1
root@linux-study:~#
5.8. 监听和显示连接跟踪事件
实时显示连接跟踪事件,如新建连接、更新连接或销毁连接:conntrack -E
root@linux-study:~#
root@linux-study:~# conntrack -E|head[UPDATE] tcp 6 60 SYN_RECV src=192.168.201.109 dst=182.75.23.156 sport=61456 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=61456[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.201.109 dst=182.75.23.156 sport=61456 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=61456 [ASSURED][UPDATE] tcp 6 120 FIN_WAIT src=192.168.201.109 dst=182.75.23.156 sport=61456 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=61456 [ASSURED][UPDATE] tcp 6 30 LAST_ACK src=192.168.201.109 dst=182.75.23.156 sport=61456 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=61456 [ASSURED][UPDATE] tcp 6 10 CLOSE src=192.168.201.109 dst=182.75.23.156 sport=61456 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=61456 [ASSURED][NEW] tcp 6 120 SYN_SENT src=192.168.201.111 dst=182.75.23.156 sport=64550 dport=443 [UNREPLIED] src=182.75.23.156 dst=172.30.3.222 sport=443 dport=64550[UPDATE] tcp 6 60 SYN_RECV src=192.168.201.111 dst=182.75.23.156 sport=64550 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=64550[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.201.111 dst=182.75.23.156 sport=64550 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=64550 [ASSURED]
[DESTROY] tcp 6 src=192.168.201.109 dst=182.75.23.156 sport=26138 dport=443 src=182.75.23.156 dst=172.30.3.222 sport=443 dport=26138 [ASSURED][NEW] tcp 6 120 SYN_SENT src=192.168.201.109 dst=182.75.23.156 sport=1302 dport=443 [UNREPLIED] src=182.75.23.156 dst=172.30.3.222 sport=443 dport=1302
root@linux-study:~#
5.9. 从连接跟踪表中删除与特定IP相关的所有连接
删除与特定源IP地址相关的所有连接条目:conntrack -D -s 192.168.1.100
删除与特定目的IP地址相关的所有连接条目:conntrack -D -d 192.168.1.100
5.10. 利用NAT信息删除连接条目
删除所有源NAT(SNAT)到特定IP的连接:conntrack -D --src-nat 192.168.1.100
删除所有目的NAT(DNAT)到特定IP的连接:conntrack -D --dst-nat 192.168.1.100
当然,让我们在适当的地方加入emoji来让回答更加生动:
6. 案例分析💡
6.1. 案例1: 网络连接过多导致服务不可用 🚫🔌
6.1.1. 问题描述
服务器突然无法响应,初步怀疑是由于网络连接数过多导致。需要快速诊断是否有大量的网络连接占用了服务器资源。
6.2. 解决过程
-
首先,使用
conntrack -L
命令🔍列出当前所有的网络连接状态,这能帮助我们快速获取当前的连接概览。 -
使用
conntrack -C
命令直接获取当前跟踪的连接总数,这可以更快地帮助我们判断是否连接数过多。 -
如果发现连接数异常高,使用
conntrack -L | grep "状态" | wc -l
(状态比如ESTABLISHED)来具体分析哪种类型的连接占比较高。 -
为了解决这个问题,可以使用
conntrack -D --dst <服务器IP>
来删除向特定目标IP地址的所有连接,或者根据需要删除特定状态的连接,如conntrack -D --state ESTABLISHED
来减少活跃连接🚨。 -
在处理完毕后,监控服务器性能📈,确保服务恢复正常。
6.3. 案例2: 疑似DDoS攻击 🛡️💥
6.3.1. 问题描述
服务器遭受疑似DDoS攻击,导致正常服务受到影响。需要快速定位并减轻攻击。
6.3.2. 解决过程
-
使用
conntrack -L
命令查看当前的网络连接,特别是那些状态为NEW
但未得到回应的连接(即[UNREPLIED]标记)。 -
通过观察源IP分布,使用
conntrack -L | grep [UNREPLIED] | awk '{print $NF}' | sort | uniq -c | sort -nr
来识别发送大量连接请求的源IP。 -
对于明显的攻击源,可以使用
conntrack -D --src <攻击源IP>
来直接从连接跟踪表中删除这些恶意连接⛔。 -
为进一步保护系统,可以基于观察到的攻击模式,通过防火墙规则(如iptables)阻止这些恶意IP的进一步连接尝试🔐。
6.4. 案例3: 服务响应缓慢 🐌💤
6.4.1. 问题描述
用户报告特定服务响应缓慢。初步怀疑是网络层面的问题,需要确认是否为网络连接问题。
6.4.2. 解决过程
-
使用
conntrack -L | grep "特定服务的端口"
来查看与服务相关的网络连接状态,从而判断是否有异常的连接状态。 -
如果发现有大量的
SYN_RECV
状态,可能表明SYN Flood攻击,或者服务端口无法及时处理入站连接请求。 -
对于这种情况,可以通过调整服务器的TCP栈参数来提高处理能力,同时使用
conntrack -D
命令删除一些长时间未建立的连接,以减轻服务器负担🔧。 -
长期解决方案可能需要增加服务器资源,优化服务配置,或者使用负载均衡等技术来改善服务响应🔄。
7. 注意事项⚠️
- 大多数
conntrack
命令需要管理员权限(root)来执行。🛠️ - 删除连接条目时要格外小心,因为这可能会影响正在进行的网络会话。⚠
- 使用
conntrack -E
监听连接事件时,输出可能会非常快速和大量,可以考虑将其重定向到文件中或通过管道传递给grep
进行过滤。🔍
相关文章:
Linux中的conntrack命令深入解析
在Linux网络管理和监控领域,conntrack命令是一个强大的工具,它提供了对netfilter连接跟踪系统的直接访问🔍。这篇文章将深入探讨conntrack的由来、底层原理、参数意义,以及其常见用法,并对返回结果的每个字段进行详细解…...
反截屏控制技术如何防止信息通过手机拍照泄漏?
反截屏控制技术为企业数据安全提供了重要的防护措施。通过以下几点,有效阻止了信息通过拍照等方式的泄漏: 反截屏控制开启,用户启动截屏操作时,允许非涉密内容截屏操作,但所有涉密内容窗口会自动隐藏,防止涉…...
0.k8s简介
目录 k8s是什么 k8s不是什么 云原生 微服务 整体式架构与微服务架构 微服务的特性 微服务的优势 k8s是什么 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快…...
VScode 集成终端设置默认打开当前文件夹 mac系统
一.快捷键设置 搜索 openInIntegratedTerminal 如图: 二.设置cmd 默认打开位置 点击设置 搜索 ntegrated:cwd 如下图: 三.查看ip 快捷指令: ipconfig getifaddr en0...
HDLbits 刷题 -- Alwaysblock2
学习: For hardware synthesis, there are two types of always blocks that are relevant: Combinational: always (*)Clocked: always (posedge clk) Clocked always blocks create a blob of combinational logic just like combinational always blocks, but…...
一、Docker部署GitLab(详细步骤)
Docker部署GitLab(详细步骤) 一、拉取镜像二、启动容器三、修改配置四、修改密码五、浏览器访问 一、拉取镜像 docker安装教程:https://qingsi.blog.csdn.net/article/details/131270071 docker pull gitlab/gitlab-ce:latest二、启动容器 …...
Vue3 Ajax(axios)
Vue 版本推荐使用 axios 来完成 ajax 请求。 安装方法 使用 cdn: <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 使用 npm: $ npm install axios GET 方法 我们可以简单的读取 JSON 数据: const app {data() {r…...
正则表达式引擎库汇合
1.总览表格 一些正则表达式库的对比 index库名编程语言说明代码示例编译指令1Posix正则C语言是C标准库中用于编译POSIX风格的正则表达式库 posix-re.cgcc posix-re.c 2PCRE库C语言提供类似Perl语言的一个正则表达式引擎库。 一般系统上对应/usr/lib64/libpcre.so这个库文件&am…...
eBay买家号注册下单容易死号?是什么原因导致?
随着电子商务的迅猛发展,跨境电商平台eBay日益成为众多消费者和商家的首选。然而,自去年下半年以来,eBay推出的新规则给买家号的注册带来了前所未有的挑战。许多新用户反映,在注册eBay买家号后,往往遭遇刚注册就被冻结…...
【Linux】-进程知识铺垫①计算机硬件的组织:冯诺依曼体系结构详细解读②关于操作系统对软硬件及用户的意义
目录 编辑 1.关于计算机的体系结构 1.1 冯诺依曼体系结构的诞生 2.冯诺依曼体系结构 2.1 cpu:运算器:更多的是让cpu具有特殊的数据计算功能: 2.2 控制器 2.3输入设备 2.4输出设备 3.计算机各个硬件设备之间的关系 4.内存与计算机效率 5.关于为什么总说…...
让ECC升级S/4HANA一步到位的“全面升级方案包”
SAP最新一代商务套件S/4HANA比ECC系统拥有更高性能的存储数据库HANA、更个性化的Fiori用户界面设计系统,能够大大提升系统效率,带来便捷、高效、良好的用户体验。但企业原先使用的ECC系统里面保存了积累多年的关键流程和数据,让企业面对系统升…...
AutoGluon
官网 amazon (base) PS C:\Users\gg葱> conda env list # conda environments: # pytorch1 C:\Users\gg葱\.conda\envs\pytorch1 base * D:\ANCDD:\Documents\LMm\env\pytorch2(base) PS C:\Users\gg葱> conda create --prefixD:/Doc…...
【网站项目】少儿编程管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
基于C语言的数据结构--顺序表讲解及代码函数实现展示
本篇文章是数据结构的开篇,所以我们先来了解一下什么是数据结构。 什么是数据结构 数据结构是由“数据”和“结构”两个词组合而来,自然要以两个词分别去阐述。 首先,什么是数据?数据(data)是事实或观察的结果,是对客…...
(学习日记)2024.03.31:UCOSIII第二十八节:消息队列常用函数
写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...
DLC原理解析及其优化思考
1. 引言 Discreet Log Contract (DLC) 是由麻省理工学院的Tadge Dryja在2018年提出的一套基于预言机的合约执行方案。DLC 允许两方根据预定义的条件进行有条件付款。各方确定可能的结果并进行预签名,并在预言机签署结果时使用这些预签名来执行支付。 因此ÿ…...
tigramite教程(七)使用TIGRAMITE 进行条件独立性测试
文章目录 概述1 连续数值变量1.1 ParCorr 偏相关(ParCorr类)1.2 鲁棒偏相关(RobustParCorr)非线性检验1.3 GPDC1.4 CMIknn 2a. 分类/符号时间序列2b. 混合分类/连续时间序列多变量X和Y的测试 概述 这个表格概述了 X ⊥ Y ∣ Z X\…...
【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置
【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置 目录 【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置Ansible 基础知识部署 Keycloak创建 OIDC-客户端创建 oauth2proxy 部署顶级 Ansible PlaybookHost.iniplayboo…...
鸿蒙OS开发实例:【应用状态变量共享】
平时在开发的过程中,我们会在应用中共享数据,在不同的页面间共享信息。虽然常用的共享信息,也可以通过不同页面中组件间信息共享的方式,但有时使用应用级别的状态管理会让开发工作变得简单。 根据不同的使用场景,ArkT…...
C#清空窗体的背景图片
目录 一、涉及到的知识点 1.设置窗体的背景图 2.加载窗体背景图 3.清空窗体的背景图 二、 示例 一、涉及到的知识点 1.设置窗体的背景图 详见本文作者的其他文章:C#手动改变自制窗体的大小-CSDN博客 https://wenchm.blog.csdn.net/article/details/137027140…...
Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)
【写在前面】 之前应公司需要,给公司写过一整套直播的库( 推拉流,编解码),类似于 libobs。 结果后来因为没有相关项目,便停止开发&维护了。 不过里面很多有用的组件,然后也挺好用的,遂开源出来一部分。…...
将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件
实现文件流PDF不需要预览直接调用打印机打印实现方案就是,将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件。源码地址...
加密软件VMProtect教程:使用脚本-功能
VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…...
51单片机入门_江协科技_21.1_开发板USB口连接建议
1. 目前我自己用的普中A2版本的开发板,操作失误导致在开发板连接电脑并通电的情况下误将跳线帽触碰到开发板的3.3V与GND,导致USB口浪涌,2个电脑上面的USB口烧毁,开发板暂时没有任何问题,电脑USB口现在只是接通后有电&a…...
基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
基于Spring Boot3实现Spring Security6 JWT Redis实现登录、token身份认证。 用户从数据库中获取。使用RESTFul风格的APi进行登录。使用JWT生成token。使用Redis进行登录过期判断。所有的工具类和数据结构在源码中都有。 系列文章指路👉 系列文章-基于SpringBoot3…...
Kubernetes(k8s):精通 Pod 操作的关键命令
Kubernetes(k8s):精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…...
【随笔】Git 高级篇 -- 相对引用2(十三)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
xilinx AXI CAN驱动开发
CAN收发方案有很多,常见的解决方案通过是采用CAN收发芯片,例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现,AXI CAN是其中一种; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…...
Python:百度AI开放平台——OCR图像文字识别应用
一、注册百度AI开放平台 使用百度AI服务的步骤为: 注册:注册成为百度AI开放平台开发者;创建AI应用:在百度API开放平台上创建相关类型的的AI应用,获得AppID、API Key和Secret Key;调用API:调用…...
OpenEuler/Centos制作离线软件源
需求背景: 一般线上服务器都是不能连接外网,服务器安装好系统之后就需要部署相关软件,此时因为无法联网导致无法下载软件,所以都会做一个本地的离线软件源,本文简单介绍如何快速利用已经下载好的rpm包,制作…...
网站链接怎么做/百度权重工具
MySQL以以下规则描述比较操作如何进行转换:两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换两个参数都是字符串,会按照字符串来比…...
公共资源交易网站建设方案/种子资源
PS:用代码画点这样写是为了跟后面的用鼠标画点线面区分出来画点drawPointGraphic: function () {//点有多种样式:一般的点,显示文字,显示图片//一般的点let wkt "POINT(113.566806 22.22445)";//样式//PS:其…...
网站建设济南有做的吗/湘潭关键词优化公司
用域策略脚本实现把客户端administrator帐号密码统一更改 在写这贴之前,我在网上找过很多关于这个方面的资料,看到他们都是说的差不多,但是当一个新手来弄的话就比较难实现了。非常感谢网上的朋友们对我的帮助,我写这帖子就是想要…...
烟台制作网站有哪些/昆明网站seo公司
今天早上刘sir给我们教怎么样创建自己的博客,第一次接触这个东西,觉得很有趣,很不错,希望以后再这里能学习到跟多的知识,认识更多的朋友. QQ:403378100转载于:https://blog.51cto.com/3088278/563525...
文化传媒有限公司网站建设/自己建网页
这个实现起来很简单,就两步,先读取excel文件单元格的值,然后插入SQL数据库中。下面我介绍一下如何从excel文件读取数据,并插入到mysql数据库中,主要用到openpyxl和pymysql这两个包,实验环境win7 python3.6 …...
好的培训网站模板/郑州seo网站管理
我想告诉你Android开发你还在用JAVA吗?现在开始使用新的编程语言了,自从Kotlin成为谷歌官方语言后,你有没有心动呢? 我想告诉你一个名为Kotlin的新编程语言并且阐述为什么你应该考虑下一个项目中使用它。我以前非常喜欢使用JAVA,但…...