正则的效率是在比不上原生的，所以丢个链接(过滤器函数)走人。 二逼正则: $valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string); 正确正则: preg_match('/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/', $ipAddress); 过滤器的选项，比如可以过滤私有IP地址等。 用法参考Validating an IP address with PHP's filter_var function
经常网络被攻击，最有效的方式就是在linux操作系统上直接限制ip访问，主要有两种方式设置 1.使用hosts.allow和hosts.deny来设置ip白名单和黑名单，/etc/目录下 优先级为先检查hosts.deny，再检查hosts.allow， 后者设定可越过前者限制， 例如： a.限制所有的ssh， 除非从218.64.87.0 - 127上来。 hosts.deny: in.sshd:ALL hosts.allow: in.sshd:218.64.87.0/255.255.255.128 b.封掉218.64.87.0 - 127的telnet hosts.deny in.sshd:218.64.87.0/255.255.255.128 c.限制所有人的TCP连接，除非从218.64.87.0 - 127访问 hosts.deny ALL:ALL hosts.allow ALL:218.64.87.0/255.255.255.128 d.限制218.64.87.0 - 127对所有服务的访问 hosts.deny ALL:218.64.87.0/255.255.255.128 其中冒号前面是TCP daemon的服务进程名称，通常系统 进程在/etc/inetd.conf中指定，比如in.ftpd，in.telnetd，in.sshd 其中IP地址范围的写法有若干中，主要的三种是： 1.网络地址--子网掩码方式： 218.64.87.0/255.255.255.0 2.网络地址方式（我自己这样叫，呵呵） 218.64.（即以218.64打头的IP地址） 3.缩略子网掩码方式，既数一数二进制子网掩码前面有多少个“1”比如： 218.64.87.0/255.255.255.0 -- 218.64.87.0/24 设置好后，要重新启动 # /etc/rc.d/init.d/xinetd restart # /etc/rc.d/init.d/network restart 2.使用iptables命令 单个IP的命令是 iptables -I INPUT -s 80.241.219.171 -j DROP 封IP段的命令是 iptables -I INPUT -s 96.47.225.0/16 -j DROP iptables -I INPUT -s 96.47.225.0/16 -j DROP iptables -I INPUT -s 96.47.225.0/16 -j DROP 封整个段的命令是 iptables -I INPUT -s 96.47.225.0/8 -j DROP 封几个段的命令是 iptables -I INPUT -s 96.47.225.0/24 -j DROP iptables -I INPUT -s 96.47.225.0/24 -j DROP 服务器启动自运行 有三个方法： 1、把它加到/etc/rc.local中 2、vi /etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中，系统启动iptables时自动执行。 3、service iptables save 也可以把你当前的iptables规则放/etc/sysconfig/iptables中，系统启动iptables时自动执行。 后两种更好此，一般iptables服务会在network服务之前启来，更安全 解封： iptables -L INPUT iptables -L --line-numbers 然后iptables -D INPUT 序号 iptables 限制ip访问 通过iptables限制9889端口的访问（只允许192.168.1.101、192.168.1.102、192.168.1.103）,其他ip都禁止访问 iptables -I INPUT -p tcp --dport 9889 -j DROP iptables -I INPUT -s 192.168.1.101 -p tcp --dport 9889 -j ACCEPT iptables -I INPUT -s 192.168.1.102 -p tcp --dport 9889 -j ACCEPT iptables -I INPUT -s 192.168.1.103 -p tcp --dport 9889 -j ACCEPT 转自：http://www.javaarch.net/jiagoushi/1004.htm