当前位置: 首页 > 编程日记 > 正文

防火墙iptables介绍

防火墙:

netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统。该架构可以实现数据包过滤,网络地址转换以及数据包管理功能。linux中防火墙分为两部分:netfilter和iptables。netfilter位于内核空间,目前是Linux内核的组成部分。netfilter可以对本机所有流入,流出。转发的数据包进行查看,修改,丢弃,拒绝等操作。netfilter位于内核空间中,用户无法接触内核和修改内核,需要使用iptables或Firewalld等工具。

防火墙模块位于/lib/modules/`uname -r `/kernel/net/netfilter目录下,需要某个模块可以通过modprobe加载该模块。

iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。

CENTOS7中在原有netfilter/iptables架构基础上添加了firewalld。iptables仅可以调整ipv4的防火墙规则。centos7中默认是用Firewalld作为用户的防火墙工具,当用户使用firewalld编写ipv4防火墙规则时,firewalld依然调用底成的iptables实现具体功能。

传统iptables如何使用。

iptables的规则表和链
表(tables):提供特定的功能,iptables内置了4个表,即

filter表(实现包过滤)
nat表(网络地址转换)
mangle表(修改数据标记位规则表)
raw表(跟踪数据表规则表)

链(chains):当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

INPUT(入站数据过滤)
OUTPUT(出站数据过滤)
FORWARD(转发数据过滤)
PREROUTING(路由前过滤)
POSTROUTING(路由后过滤)

-->PREROUTING-->路由决定----->FORWARD------------->POSTROUTING|                        ^|                        |INPUT--->LOCAL PRECESS-->OUTPUT

1)外部主机发送到数据包给防火墙本机,数据经过PREROUTING链和INPUT链

2)防火墙本机发送数据包到外部主机,数据经过OUTPUT和POSTROUTING

3)防火墙作为路由负责转发数据,数据经过PREROUTING,FORWARD,POSTROUTING.

1)当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
 2)如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
 3)如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

规则概念
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作是添加,修改和删除等规则。
其中:

匹配(match):符合指定的条件,比如指定的 IP 地址和端口。
丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。
接受(accept):和丢弃相反,接受这个包,让这个包通过。
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。
规则(rule):一个或多个匹配及其对应的目标。

防火墙的语法格式

1)iptables的基本语法格式
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

说明:
表名、链名:用于指定iptables命令所操作的表和链;
命令选项:用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;
条件匹配:用于指定对符合什么样 条件的数据包进行处理;
目标动作或跳转:用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

2)iptables命令的基本参数

-P    设置默认策略:iptables -P INPUT (DROP    ACCEPT)
-F    清空规则链
-L    查看规则链
-A    在规则链的末尾加入新规则
-I    num 在规则链的头部加入新规则
-D    num 删除某一条规则
-s    匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d    匹配目标地址
-i    网卡名称 匹配从这块网卡流入的数据
-o    网卡名称 匹配从这块网卡流出的数据
-p    匹配协议,如tcp,udp,icmp
--dport num    匹配目标端口号
--sport num    匹配来源端口号

 

常用命令:
-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则,默认是filter表,如果列出nat表的规则需要添加-t,即iptables -t nat -L
-N 新的规则-->iptables -N allowed 定义新的规则通用参数:
-p 协议  例:iptables -A INPUT -p tcp
-s源地址 例:iptables -A INPUT -s 192.168.1.1
-d目的地址 例:iptables -A INPUT -d 192.168.12.1
-sport源端口 例:iptables -A INPUT -p tcp --sport 22
-dport目的端口 例:iptables -A INPUT -p tcp --dport 22
-i指定入口网卡 例:iptables -A INPUT -i eth0
-o指定出口网卡 例:iptables -A FORWARD -o eth0
-j 指定要进行的处理动作
常用的ACTION: DROP:丢弃 REJECT:明示拒绝 ACCEPT:接受 SNAT基于原地址的转换 source
--指定原地址
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回 在自定义链执行完毕后使用返回,来返回原规则链

实例:

1.空当前的所有规则和计数

iptables -F  # 清空所有的防火墙规则
iptables -X  # 删除用户自定义的空链
iptables -Z  # 清空计数

2.配置允许ssh端口连接

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求

3.允许本地回环地址可以正常使用

iptables -A INPUT -i lo -j ACCEPT
#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT

4.设置默认的规则

iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去

5.配置白名单

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口

6.开启相应的服务端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

保存规则到配置文件中

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables

列出已设置的规则

iptables -L [-t 表名] [链名]
四个表名 raw,nat,filter,mangle
五个规则链名 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
filter表包含INPUT、OUTPUT、FORWARD三个规则链iptables -L -t nat                  # 列出 nat 上面的所有规则
#            ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个
iptables -L -t nat  --line-numbers  # 规则带编号
iptables -L INPUTiptables -L -nv  # 查看,这个列表看起来更详细

清除已有规则

iptables -F INPUT  # 清空指定链 INPUT 上面的所有规则
iptables -X INPUT  # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。# 如果没有指定链名,则会删除该表中所有非内置的链。
iptables -Z INPUT  # 把指定链,或者表中的所有链上的所有计数器清零。

开放指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

屏蔽IP

iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP  # 屏蔽恶意主机(比如,192.168.0.8
iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

指定数据包出去的网络接口,只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

iptables -A FORWARD -o eth0

查看已添加的规则

iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)pkts bytes target     prot opt in     out     source               destination5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)pkts bytes target     prot opt in     out     source               destination5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

启动网络转发规则,

公网210.14.67.7让内网192.168.188.0/24上网

iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127

端口映射,

本机的 2222 端口映射到内网 虚拟机的22 端口

iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22

字符串匹配

比如,我们要过滤所有TCP连接中的字符串test,一旦出现它我们就终止这个连接,我们可以这么做:

iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
iptables -L# Chain INPUT (policy ACCEPT)
# target     prot opt source               destination
# REJECT     tcp  --  anywhere             anywhere       STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
# Chain FORWARD (policy ACCEPT)
# target     prot opt source               destination
#
# Chain OUTPUT (policy ACCEPT)
# target     prot opt source               destination

阻止Windows蠕虫的攻击

iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"

防止SYN洪水攻击

iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEP

iptables防火墙规则的顺序十分重要,内核按顺序检查这些规则,如果发现有匹配的规则条目,则立刻执行相关动作,停止继续向下查找规则条目,如果所有的防火墙规则都未匹配成功,则按照默认的策略处理, -A添加防火墙规则追加到整个链的最后,-I默认会插入到链中作为第一条规则

iptables的用法:iptables [-t 表名] {-A|-D|-I|-F|-L|-R|-Z|-P} 链名 rule-specification

查看filter表的所有规则
iptables -nL
查看filter表防火墙规则并显示规则编号 iptables
-nL --line-number

查看net表的所有规则 iptables
-t nat -nL

清空filter表的所有规则 iptables
-F

在filter表中添加一条新的入站规则,丢弃192.
168.1.0主机发送给防火墙本机的所有数据包 iptables -A INPUT -s 192.168.0.1 -j DROP
在filter表中,拒绝192.
168.0.22ping防火墙本机 iptables -I INPUT -s 192.168.0.22 -p icmp -j REJECT
删除filter表中INPUT链的第一条规则 iptables
-D INPUT 1
替换filter表中第二条规则,拒绝192.168.1.254之外的任何主机连接到防火墙本机 iptables -R INPUT 2 ! -s 192.168.1.254 -j REJECT
修改filter表中INPUT的默认规则是接受数据包 iptables
-t filter -P INPUT ACCEPT
将192.
168.0.10主机发送给防火墙本机22端口的所有数据包信息记录到messages日志: iptables -I INPUT -s 192.168.0.10 -p tcp --dport 22 -j LOG
允许任何主机从eno16网络接口访问防火墙本机的80端口 iptables
-I INPUT -i eno16 --p tcp --dport 80 -j ACCEPT

IPTABLES防火墙应用实例

案例一:允许任意客户端访问服务器主机提供的日常服务(http,https,ssh),在Linux系统中/etc/services文件可以找到各种服务对应的端口号

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
(如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出.) iptables
-A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP
(-P:设置链默认规则) iptables
-P OUTPUT ACCEPT

案例二:公司拥有一个共有ip,使用防火墙实现局域网中所有主机通过SNAT共享上网,使用centos7作为公司软路由,公司内部所有192.168.0.1/24网段内的主机连接到外网124.126.199.84时,防火墙自动将所有数据包的原地址修改为路由器上的公有IP,最后互联网将信息返回路由后,由路由转交给真正的后端主机。防火墙原地址转换(SNAT)规则需写入到NAT表中的POSTROUTING链。

在centos7软路由配置:

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 124.126.199.84

案例三:公司对外有一个公有IP,内部有http,mail两台核心的服务器,通过防火墙实现客户可以从互联网的任意位置访问位于公司内部的两台服务器资源,连接方向发生变化,案例二是SNAT,本例是DNAT.

该案例中0.100是http,0.101是postfix,124.126.199.84是作为软路由使用的。
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 80 DNAT --to-destination 192.168.0.100 iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 25 DNAT --to-destination 192.168.0.101
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 110 DNAT --to-destination 192.168.0.101

案例四:目前网络上攻击手法多,很多攻击采用发送大量无效的数据包给服务器,造成服务器无法正常响应正常的数据请求,iptables提供了一个limit扩展功能,可以限制单位时间内数据包的个数。下面是规则是当每秒数据包个数为500时接受入站连接,否则拒绝连接。

iptables -I INPUT -m limit --limit 500/sec -j ACCEPT
iptables -P INPUT DROP

案例五:企业环境中,服务器面临各种攻击,iptables本身属于三层过滤防火墙,也提供了string扩展功能,通过--string可以根据关键词限制网络连接。下面是记录基于Linux软路由服务器防火墙规则中,实现拒绝转发包含有关键词/etc/passwd 以及qq的数据包,防止将密码文件复制出局域网,防止内部员工访问QQ网站。

iptables -I FORWARD -m string --algo bm--string "/etc/passwd" -j REJECT
iptables -I FORWARD -m string --algo bm--string "qq" -j REJECT

案例六:根据数据连接状态设置防火墙规则,放行所有的出站数据包,拒绝入站的新连接请求与无效连接,放行入站的回应请求。

iptables -F
iptables -A INPUT -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT

案例七:公司基于Linux软路由设备,要求在路由设备上设置防火墙,记录192.168.0.1-192.168.0.11地址内所有主机发送给路由要求转发的数据包,并允许转发这些数据包

iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.11 -p tcp --dport 80 -j ACCEPT

案例八:减少不安全的端口连接

 iptables -A OUTPUT -p tcp --sport 31337 -j DROPiptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务,
既然合法服务都不使用这些非标准端口来通信,
阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会。
还有其他端口:31335274442766520034 NetBus、9704137-139(smb),2049(NFS)端口也应被禁止

案例九:

场景一
开放 tcp 10-22/80 端口 开放 icmp 其他未被允许的端口禁止访问
存在的问题: 本机无法访问本机; 本机无法访问其他主机场景二
ftp: 默认被动模式(服务器产生随机端口告诉客户端, 客户端主动连接这个端口拉取数据) vsftpd: 使 ftp 支持主动模式(客户端产生随机端口通知服务器, 服务器主动连接这个端口发送数据)场景三
允许外网访问: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp
内部使用: file nfs -> 123/udp samba -> 137/138/139/445/tcp ftp -> 20/21/tcp remote ssh -> 22/tcp sql mysql -> 3306/tcp oracle -> 1521/tcp场景四
nat 转发场景五
防CC攻击



iptables -L -F -A -D # list flush append delete
# 场景一
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口
iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允许 tcp 10-22 端口
iptables -I INPUT -p icmp -j ACCEPT # 允许 icmp
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有

# 优化场景一
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允许固定ip访问80

# 场景二
vi /etc/vsftpd/vsftpd.conf # 使用 vsftpd 开启 ftp 主动模式
port_enable=yes
connect_from_port_20=YES
iptables -I INPUT -p tcp --dport 21 -j ACCEPT

vi /etc/vsftpd/vsftpd.conf # 建议使用 ftp 被动模式
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT

# 还可以使用 iptables 模块追踪来自动开发对应的端口

# 场景三
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问
iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有

iptables-save # 保存设置到配置文件

# 场景四
iptables -t nat -L # 查看 nat 配置

iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT
vi /etc/sysconfig/network # 配置网关

iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT

#场景五
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并发连接访问数
iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5

防火墙的备份和还原,如果不保存,计算机重启后所有规则会丢失。

iptables-save > /etc/sysconfig/iptables
iptables-save > firewall.bak
iptables-restore < firewall.bak

转载于:https://www.cnblogs.com/fengzhongzhuzu/p/9075935.html

相关文章:

企业局域网的组建

写在前面的话 随着计算机技术发展啊&#xff0c;办公无纸化、网络化已经成为一种趋势。 企业局域网的概述 企业中可能有多台计算机&#xff0c;同时还可能有其他的硬件设备&#xff0c;比如打印机、扫描仪和数码相机等。通过组建小型网络&#xff0c;可以共享企业内部各种软、硬…

python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现

概述传统多线程方案会使用“即时创建&#xff0c; 即时销毁”的策略。尽管与创建进程相比&#xff0c;创建线程的时间已经大大的缩短&#xff0c;但是如果提交给线程的任务是执行时间较短&#xff0c;而且执行次数极其频繁&#xff0c;那么服务器将处于不停的创建线程&#xff…

区块链+能源,能擦出什么样的火花?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链从闯入能源行业的那一天起&#xff0c;就引起了行业内外人群的高度关注&#xff0c;关于能源区块链的争论与质疑不断搅动人们的神经。区块链能…

JS学习梳理(三)类型和语法

类型 JavaScript 有七种内置类型&#xff1a;null、undefined、boolean、number、string、object 和symbol&#xff0c;可以使用typeof 运算符来查看typeof返回的都是字符串很多开发人员将undefined 和undeclared 混为一谈&#xff0c; 但在JavaScript 中它们是两码事。undefin…

北师大历史系65 级同学聚会宁夏【之七】——在中阿之轴、西夏王陵、董府、板桥道堂、鸿乐府及告别宴会...

北师大历史系65级同学在中阿之轴 庞心田、王庆云、李建宇、樊淑爱、何明书、郑文范、李建宇夫人、惠晓秋、边聪民、登高夫人、张登高、杨家兴、杨森翔 西夏王陵 北师大历史系65级同学在西夏王陵 北师大历史系65级同学在西夏王陵 郑文范、王庆云在沙湖 北师大历史系65级同学在董…

会声会影水墨遮罩如何变大_自媒体长期网赚项目: 自媒体如何打造自己的自媒体知识付费课程(干货)...

小编简介&#xff1a;猫哥&#xff0c;自媒体人&#xff0c;9年互联网营销实战经验&#xff0c;乐于为大家分享实战经验&#xff0c;希望认识更多志同道合的朋友。面对现在知识付费的时代&#xff0c;知识就是财富&#xff0c;能把自己储存的知识转化为财富的人并不多&#xff…

OBS源代码阅读笔记

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 obs配置文件加载&#xff1a;bool OBSBasic::InitBasicConfig(); OBS认证信息加载&#xff0c;貌似还没有实现吗&#xff1f; void Auth::Load(){ …

存储器结构层次(二)

局部性&#xff1a; 局部性分为时间局部性和空间局部性&#xff1a;Locality is typically described as having two distinct forms: temporal locality and spatial locality. In a program with good temporal locality, a memory location that is referenced once is like…

python 核心编程 第十三章

python面对对象 类和实例&#xff1a;类是对象的定义&#xff0c;实例是真真的实物。 创建一个类&#xff1a; class AddrBookEnttry(object):def __init__(self, nm, ph):self.name nmself.phone phprint"Created instance for:", self.namedef updatePhone(self,…

python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器

原标题&#xff1a;Python3使用TCP编写一个简易的文件下载器利用Python3来实现TCP协议&#xff0c;和UDP类似。UDP应用于及时通信&#xff0c;而TCP协议用来传送文件、命令等操作&#xff0c;因为这些数据不允许丢失&#xff0c;否则会造成文件错误或命令混乱。下面代码就是模拟…

提取Jar2Exe源代码,JavaAgent监控法

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 最近遇见一个麻烦&#xff0c;明明知道是java写的小软件&#xff0c;但是打包成了exe&#xff0c;木得办法&#xff0c;之前打包的都有缓存能在TEMP…

并发编程之多进程

一 multiprocessing模块介绍 python中的多线程无法利用多核优势&#xff0c;如果想要充分地使用多核CPU的资源&#xff08;os.cpu_count()查看&#xff09;&#xff0c;在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子进…

x9此计算机上没有hasp_mastercam x9安装步骤

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。mastercam x9安装步骤是&#xff1a;1、首先&#xff0c;先下载好mastercam软件&#xff0c;下载安装包的大小为3.01G&#xff0c;双击打开setup.exe安装文件&#xff0c;然后再安装…

bitcoinj开发环境搭建

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 bitcoinj开发包是一个Java版本的比特币协议实现&#xff0c;使用bitcoinj就可以实现钱包管理和交易的发送与接收&#xff0c;而无须本地安装bitcoin…

static关键字用法

static关键字 1.修饰成员变量 在我们平时的使用当中&#xff0c;static最常用的功能就是修饰类的属性和方法&#xff0c;让他们成为类的成员属性和方法&#xff0c;我们通常将用static修饰的成员称为类成员或者静态成员&#xff0c;这句话挺起来都点奇怪&#xff0c;其实这是相…

swift x输入流_SwiftUI 探索 - 状态和数据流

SwiftUI是iOS13新出的声明式UI框架&#xff0c;将会完全改变以前命令式操作UI的开发方式。此文章主要介绍SwiftUI中状态管理的方式。可变状态State与React和Flutter中的State类似&#xff0c;只不过React和Flutter中需要显式调用setState方法。在SwiftUI 中直接修改State属性值…

qt 控件 背景色 透明 除去边框

在调试ui的时候&#xff0c;需要将背景色变为透明&#xff0c;与母控件的颜色一致&#xff0c;并且除去边框。 参考链接&#xff1a; http://www.qtcentre.org/threads/12148-how-QTextEdit-transparent-to-his-parent-window 除去背景色&#xff0c;使透明。ui->textBrowse…

A Strange Bitcoin Transaction

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 在之前的谈谈比特币的地址安全问题这篇文章中&#xff0c;我们谈到一个名为”LBC”的项目&#xff0c;这个项目通过暴力碰撞企图打捞到一些什么东西…

Jsoncpp 使用方法解析

Jsoncpp是目前比较好用的开源Json解析库&#xff0c;现在总结一下它的使用方法&#xff0c;理解&#xff0c;以供以后查阅。 在引入Jsoncpp的时候我们看到Jsoncpp里边的常用的cpp文件&#xff0c;有json_reader.cpp,json_value.cpp,json_writer.cpp, 其中&#xff1a; json_val…

tomcat限速_WEB服务的下载限速(二)(限速模块安装与配置)

一、准备工作1、下载mod_bw-0.92.tgz2、安装httpd-develyum install httpd-devel二、安装限速模块tar -xvf mod_bw-0.92.tgzapxs -c -i -a mod_bw.c三、配置apachevim /usr/local/apache/conf/httpd.conf查看是否已加载 LoadModule bw_module modules/mod_bw.so如果没…

EntityFrameworkCore 安装

映射现有&#xff08;多个&#xff09;数据库&#xff1a; 安装Microsoft.EntityFrameworkCore最新版本Tools -> NuGet Package Manager -> Package Manager Console 分别输入&#xff1a; Scaffold-DbContext "Server.;DatabaseSxh;Trusted_ConnectionTrue;" …

python神秘的魔法函数_Python魔法函数

1.什么是魔法函数魔法函数即Python类中以__(双下划线)开头&#xff0c;以__(双下划线)结尾的函数&#xff0c;Python提供的函数&#xff0c;可让咱们随意定义类的特性示例&#xff1a;class Company(object):def __init__(self, employee_list):self.employee employee_listde…

HDU-4738-Caocao's Bridges(tarjan)

转载于:https://www.cnblogs.com/GrowingJlx/p/6642692.html

博客园美化技巧汇总

首先得有js权限 1.1 页脚js代码 <script type"text/javascript"> /*功能&#xff1a;生成博客目录的JS工具测试&#xff1a;IE8&#xff0c;火狐&#xff0c;google测试通过zhang_derek2018-01-03 */ var BlogDirectory {/*获取元素位置&#xff0c;距浏览器左…

数据事务四种隔离机制和七种传播行为

数据事务四种隔离机制和七种传播行为 一、隔离级别&#xff1a; 数据库事务的隔离级别有4个&#xff0c;由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable&#xff0c;这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 &#xff11;.…

vue注册新节点_vue怎么重新组装slots节点

在后台列表中通常会有比较多的操作按钮 过多的按钮影响布局 也影响操作 因此想通过vue的组件来控制显示的按钮个数 多余的按钮自动被收进一个特殊的 更多 按钮里面&#xff0c;效果图&#xff1a;组件定义&#xff1a;Vue.component(button-groups, {render(createElement) {re…

什么是EOS?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 关于EOS有很多炒作。2017年5月&#xff0c;EOS的创始人丹•拉莫(Dan Larimer)在纽约宣布这一消息时&#xff0c;一幅巨大的巨型屏幕广告在时代广场上…

【GDKOI2016Day1T1-魔卡少女】【拆位】线段树维护区间内所有连续子区间的异或和...

题意&#xff1a;给出N个数&#xff0c;M个操作。操作有修改和询问两种&#xff0c;每次修改将一个数改成另一个数&#xff0c;每次询问一个区间的所有连续子区间的异或和。n,m<100000,ai<1000 题解&#xff1a; 当年&#xff08;其实也就是今年&#xff09;做不出来的题…

用composer安装laravel-bjyblog

前面讲了两行命令composer的安装&#xff0c;现在我们来操作一下composer安装基于laravel的博客laravel-bjyblog。测试环境是linux&#xff0c;bt面板&#xff0c;php7.2安装扩展fileinfo/opcache/redis/imagemagick/imap/exif&#xff0c;禁用 proc_open 函数 下面开始安装&am…

微信小程序多项选择器_微信小程序三级联动之多列选择器

有些时候&#xff0c;三级联动业务场景并不只是全国地区选择&#xff0c;可能还涉及到自定义分类的三级联动&#xff0c;这时就需要使用微信的多列选择器。如果只是一列字段&#xff0c;或者每次拖动一次都去服务端取&#xff0c;会比较容易。 如果想一次定义好json,关联数据相…