Linux命令之iptables
从CentOS7开始,系统自带的防火墙更改为firewalld,但同样支持iptables,不过只有iptables命令,如果想要使用iptables服务需要自行安装iptables-server。
iptables是netfilter/iptables的简称,IP信息包过滤系统。netfilter组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
(1).iptables的四表五链
四表:指的是raw、mangle、nat和filter;五链:指的是INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING
1)四表介绍
raw表用于处理异常,包括的规则链有PREROUTING、OUTPUT。一般使用不到,raw表在整个防火墙体系中优先级最高,如果启用raw表数据将会跳过conntrack(连接跟踪机制)。
mangle表主要应用在修改数据包内容上,用来做流量整形,给数据包打上标识,包含所有规则链。
nat表涉及网络地址转换,包含的规则链有PREROUTING、POSTROUTING和OUTPUT。
filter表负责过滤数据包,包含的规则链有INPUT、OUTPUT和FORWARD。
表间优先级:raw>mangle>nat>filter
2)五链介绍
INPUT匹配目标IP是本机的数据包。
OUTPUT出口数据包,一般不在此规则链上做配置。
FORWARD匹配流经本机的数据包。
PREROUTING用来修改目的地址,可以用来做DNAT,常见的用法就是内网端口映射到外网端口。
POSTROUTING用来修改源地址用来做SNAT,常见的用法就是内网主机通过路由NAT转换功能访问外网
链间匹配顺序:入站数据PREROUTING-->INPUT;出站数据OUTPUT-->POSTROUTING;转发数据PREROUTING-->FORWARD-->POSTROUTING。
链内规则匹配顺序:自上而下依次进行匹配,直到找到相匹配的规则为止。如果在链内找不到匹配的规则,那么将按照该链的默认规则处理(未修改默认规则情况下,都是允许)。
3)iptables过滤流程
表-->链-->规则
(2).iptables语法
iptables [-t 表名] [操作命令] [链名] [规则号码] [匹配条件] [-j 匹配到之后的动作]
注意:如果不指定表明,则默认为filter
注意:使用命令的都是临时添加规则,一旦重启规则还原。如果想永久添加请将命令写入/etc/sysconfig/iptables配置文件(一条命令一行)。另外还可以在调试完iptables后使用service iptables save来保存临时规则,使其永久生效。
1)常用的操作命令
-A <链名> [具体规则内容] 在链最后追加一条规则
-D <链名> [规则号码|具体规则内容] 删除一条指定规则
-F <链名> 清空某个链的规则,除默认规则
-I <链名> [规则号码] [具体规则内容] 插入一条指定规则号码的规则,规则号码默认为1
-R <链名> [规则号码] [具体规则内容] 替换或修改指定规则号码的规则
-P <链名> [匹配到之后的动作] 设置某个链的默认规则
-L <链名> 列出某个链的所有规则
-S <链名> 以命令的形式显示规则(看不惯-L的可以使用此命令)
[具体规则内容]=[匹配条件] [-j 匹配到之后的动作]
注意:-P后面的匹配动作没有-j
2)常用的匹配条件
-p <协议> 匹配协议类型,可以是tcp,udp,udplite,icmp,esp,ah,sctp或 all
-s <地址>[/掩码] 匹配来源地址,可以是IP,网段,域名,主机名或空(任何地址)
-d <地址>[/掩码] 匹配目的地址,可以是IP,网段,域名,主机名或空(任何地址)
-i <网络接口> 匹配数据包进入的网络接口,此参数主要用于nat表
-o <网络接口> 匹配数据包流出的接口
--sport <端口> 匹配数据包来源端口,可以是单个,也可以是范围
--dport <端口> 匹配数据包目的端口,可以是单个,也可以是范围
3)常用的动作
-j ACCEPT 允许数据包通过此链
-j DORP 阻止数据包通过此链,丢弃数据包
-j REJECT 拒绝数据包通过此链,会有回执
-j SNAT --to IP[-IP][:PORT[-PORT]] 源地址转换,支持但IP,也支持IP池
-j DNAT --to IP[-IP][:PORT[-PORT]] 目的地址转换,支持单IP,也支持IP池
-j MASQUERADE 伪装,动态源地址转换
注意:DROP直接丢弃,没有回执。REJECT拒绝通过,有回执。
4)附加
-m state --state <状态> 匹配包的状态,状态可以是NEW、RELATED、ESTABLISHED、INVALID
-m mac --mac-source <MAC> 匹配数据包的来源MAC地址
-m limit --limit <速率> [--burst 缓冲数量] 按一定的速率去匹配数据包,但不会限制,除非加上动作DROP。速率的单位可以是/s、/m、/h、/d
-m multiport <--sports|--dports|--ports> <端口1>[,端口2,端口3...] 一次性匹配多个端口,可以区分源端口,目的端口和普通端口
四种状态说明:
State(状态) | Explanation(注释) |
NEW | NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。 |
ESTABLISHED | ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容 易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变 为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。 |
RELATED | RELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想 是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有RELATED的。还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应 答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议 是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。 |
INVALID | INVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP 错误信息。一般地,我们DROP这个状态的任何东西。 |
这些状态可以一起使用,以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常打 开1024以上的所有端口来放行应答的数据。现在,有了状态机制,就不需再这样了。因为我们可以只开放那些有应答数据的端口,其他的都可以关闭,这样就安全多了。
(3).实例
1)查看指定表的详细规则
[root@youxi1 ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
531 39448 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 104 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
1 229 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 39 packets, 6995 bytes)
pkts bytes target prot opt in out source destination
[root@youxi1 ~]# iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 547 40556 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 2 104 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 1 229 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 49 packets, 9019 bytes)
num pkts bytes target prot opt in out source destination
加上--line可以查看规则在规则链内的编号,这样有助于插入、删除和替换的使用。
2)在指定表的指定规则链追加一条规则
[root@youxi1 ~]# iptables -t filter -A INPUT -j DROP //如果在INPUT规则链内没有符合的规则,则丢弃所有数据包,谨慎使用
[root@youxi1 ~]# iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 653 48060 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED //所有已经建立连接的传输都允许通过
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 2 104 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 //tcp、dpt端口为22的NEW数据包允许通过,保证ssh可以建立连接
5 1 229 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
6 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 9 packets, 924 bytes)
num pkts bytes target prot opt in out source destination
filter表中的INPUT规则链第1条和第4条保证了即使最后一条规则是抛弃,ssh也可以正常使用,当然ssh的端口得是22。如果DROP规则在第4条规则前,那么ssh就不能建立新的连接;如果DROP规则在第1条前,那么已经建立的连接也会被抛弃。这就是链内规则从上到下依次匹配,直到找到匹配的为止。
3)在指定表的指定链的指定位置插入一条规则
[root@youxi1 ~]# iptables -t filter -I INPUT 6 -j REJECT
[root@youxi1 ~]# iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 779 59067 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 4 208 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 2 458 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
6 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
7 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 6 packets, 664 bytes)
num pkts bytes target prot opt in out source destination
4)删除指定表的指定链的指定位置的一条规则
[root@youxi1 ~]# iptables -t filter -D INPUT 6
[root@youxi1 ~]# iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 877 65731 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 4 208 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 2 458 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
6 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 7 packets, 692 bytes)
num pkts bytes target prot opt in out source destination
5)替换指定表的指定链的指定位置的一条规则
[root@youxi1 ~]# iptables -t filter -R INPUT 6 -j REJECT
[root@youxi1 ~]# iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 938 69875 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 4 208 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 3 687 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
6 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 4 packets, 448 bytes)
num pkts bytes target prot opt in out source destination
6)修改指定表的指定链的默认规则
[root@youxi1 ~]# iptables -t filter -P INPUT DROP
[root@youxi1 ~]# iptables -t filter -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1106 82675 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
5 260 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
4 916 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 25 packets, 2428 bytes)
pkts bytes target prot opt in out source destination
7)清空指定表的所有规则
[root@youxi1 ~]# iptables -t filter -P INPUT ACCEPT
[root@youxi1 ~]# iptables -t filter -F
[root@youxi1 ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 12 packets, 792 bytes)
pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 7 packets, 676 bytes)
pkts bytes target prot opt in out source destination
上面改变了默认规则,所以,需要先改回来,否则一旦清空规则,那么会直接使用默认规则,导致无法登录。
8)使用SNAT动作,让内网主机可以上外网
环境:youxi1 外网192.168.5.101 内网192.168.6.1
youxi2 内网192.168.6.2
首先配置两台主机的内网IP,并重启network服务
这里需要注意的地方有youxi1上的内网网关和DNS不要配置,IP设置192.168.6.1,子网掩码255.255.255.0。youxi2上内网IP设置192.168.6.2,子网掩码255.255.255.0,网关设置为192.168.6.1(指向youxi1的内网IP),DNS设置一个外网可用的(114.114.114.114)。
接着在youxi1上启用路由转发功能
[root@youxi1 network-scripts]# echo "1" > /proc/sys/net/ipv4/ip_forward //临时生效
[root@youxi1 network-scripts]# vim /etc/sysctl.conf //永久生效
net.ipv4.ip_forward = 1 //添加
如果配置的永久生效还需使用如下命令,使配置生效
[root@youxi1 ~]# sysctl -p
net.ipv4.ip_forward = 1
然后最好清空防火墙规则iptables -F,当然实际是FORWARD这个规则链里默认设置了一个拒绝,可以将这个拒绝规则删除。否则只能访问IP,不能访问域名
其次在youxi1上配置SNAT
[root@youxi1 ~]# iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -j SNAT --to 192.168.5.101
[root@youxi1 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 192.168.6.0/24 0.0.0.0/0 to:192.168.5.101
当然命令还可以是iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o ens33 -j MASQUERADE
最后,可以ping一下进行测试
注意:如果filter表中的FORWARD链中的默认拒绝规则没有清理,或youxi2上的DNS不对,那么域名是无法ping通的,但IP可以
9)使用DNAT动作,让内网端口映射到外网
环境:youxi1 外网192.168.5.101 内网192.168.6.1
youxi2 内网192.168.6.2
物理机 192.168.5.2
网络配置、路由转发、防火墙规则清理和上面一样
在youxi1上配置DNAT
[root@youxi1 ~]# iptables -t nat -A PREROUTING -d 192.168.5.101 -p tcp --dport 23 -j DNAT --to 192.168.6.2:22
[root@youxi1 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1 packets, 229 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- 192.168.5.101 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:23 to:192.168.6.2:22 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 4 packets, 304 bytes)
pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 4 packets, 304 bytes)
pkts bytes target prot opt in out source destination
命令也可以是iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 23 -j DNAT --to 192.168.6.2:22
最后测试:
(4).常用的配置文件内命令
写在配置文件/etc/sysconfig/iptables内,除ssh的端口可能有时候需要改,其他基本可以无脑加。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
COMMIT
Linux命令之iptables的更多相关文章
- linux 命令笔记: iptables
配置虚拟机网卡 NAT 联网: iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE iptables -A FROWARD - ...
- Linux防火墙:iptables禁IP与解封IP常用命令
在Linux服务器被攻击的时候,有的时候会有几个主力IP.如果能拒绝掉这几个IP的攻击的话,会大大减轻服务器的压力,说不定服务器就能恢复正常了. 在Linux下封停IP,有封杀网段和封杀单个IP两种形 ...
- Linux命令-防火墙命令:iptables
iptables详解--转 查看防火墙设置: 第一种方式: cat /etc/sysconfig/iptables 第二种方式: iptables -L -n -v 设置防火墙: 第一种方式: ipt ...
- Linux命令随笔
Linux命令总结 man ==命令帮助; help ==命令的帮助(bash的内置命令); ls ==list,查看目录列表; -ld:查看目录权限; -l:(long)长格式显示属性; -F:给不 ...
- 我常用的那些linux命令
我常用的那些linux命令 用linux也有些年头了,说来也忏愧,说是有些年头了,其实也还是个不长进的主.记得第一次接触linux是boss跟我说的怎么操作,什么编辑模式,按i,a,o进入编辑模式.在 ...
- Linux防火墙配置(iptables, firewalld)
netfilter和底层实现 iptables firealld Linux中的防火墙 RHEL中有几种防火墙共存: iptables firewalld ip6tables ebtables 这些软 ...
- Linux 命令小记
1. pidof 进程名 :获取进程的pid,例如 pidof memcached 得到5333 2. unset Shell变量 :取消设置一个shell变量,从内存和shell的导出环境中删除它, ...
- LINUX命令总结 -------来自 水滴娃娃 的CSDN
LINUX命令总结 标签: LINUX命令总结 2014-01-27 15:54 41039人阅读 评论(1) 收藏 举报 分类: linux(1) 版权声明:本文为博主原创文章,未经博主允许不得 ...
- Linux命令自己总结
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
随机推荐
- Octave(数据绘制)
>> t=[:0.01:0.98]; >> y1 = sin(*pi**t); >> plot(t,y1); >> y2 = cos(*pi**t); ...
- 使用fastjson统一序列化响应格式
摘要:其实很简单的处理方式,只不够优雅,或者说没有找到fastjson为其提供便捷的处理方式.因此记录下处理该问题的过程. 目标:将所有api请求,即响应为APPLICATION_JSON的内容做统一 ...
- vue-cli3 配置全局less 、sass 变量
之前在用vue-cli3框架的时候对于常用的less .sass 变量都是需要时就在单文件中引入文件,这样做比较麻烦.那么基于 vue-cli3 如何配置全局的less .sass 变量? <1 ...
- BCB6 调用C# DLL
最近项目涉及第三方接口调用.第三方是用C#实现的WCF服务.而我们的程序是使用的BCB6开发.因此,打算将与WCF的通讯包含在C#的类库中,给BCB6调用.BCB6 是无法直接调用C#的DLL,但可以 ...
- Wannafly挑战赛24-A-石子游戏--【思维题】
链接:https://www.nowcoder.com/acm/contest/186/A 来源:牛客网 石子游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 大数据之路week05--day01(JDBC 初识之实现一个系统 实现用户选择增删改查 未优化版本)
要求,实现用户选择增删改查. 给出mysql文件,朋友们可以自己运行导入到自己的数据库中: /* Navicat MySQL Data Transfer Source Server : mysql S ...
- 0010Springboot整合thymeleaf
1.pom.xml中添加thymeleaf的起步依赖 2.编写html文件并放在classpath:/templates/路径下 3.编写controller并返回字符串,会到classpath:/t ...
- ESLint 报错 import/no-unresolved
马的,就这个规则百度了大半天终于找到可以用的: 不得不说百度真的辣鸡 还是翻墙去谷歌找到了解决方法 解决方法是:在 .eslintrc 中设置 "rules": { "i ...
- express框架初步
express框架初步使用 var exp = require('express'); var ejs = require('ejs'); var app = new exp(); app.set(& ...
- Codeforces Round #585 (Div. 2) B. The Number of Products(DP)
链接: https://codeforces.com/contest/1215/problem/B 题意: You are given a sequence a1,a2,-,an consisting ...