{"id":3853,"date":"2018-04-01T15:09:54","date_gmt":"2018-04-01T07:09:54","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=3853"},"modified":"2018-04-01T15:09:54","modified_gmt":"2018-04-01T07:09:54","slug":"java%e4%b8%ad%e5%a6%82%e4%bd%95%e5%88%a4%e6%96%ad%e4%b8%80%e4%b8%aaip%e6%98%af%e5%90%a6%e5%9c%a8%e4%b8%80%e4%b8%aa%e7%bd%91%e6%ae%b5%e9%87%8c%e9%9d%a2%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/3853.html","title":{"rendered":"Java\u4e2d\u5982\u4f55\u5224\u65ad\u4e00\u4e2aIP\u662f\u5426\u5728\u4e00\u4e2a\u7f51\u6bb5\u91cc\u9762\uff1f"},"content":{"rendered":"<p>=Start=<\/p>\n<h4 id=\"id-\u6a21\u677f-\u7f18\u7531\uff1a\">\u7f18\u7531\uff1a<\/h4>\n<p>\u529f\u80fd\u5f00\u53d1\u9700\u8981\uff0c\u5b66\u4e60Java\u9700\u8981\uff08\u4e4b\u524d\u6709\u5199\u8fc7Python\u7248\u672c\u7684\uff0c\u56e0\u4e3aPython\u672c\u8eab\u7684\u7279\u6027\u4ee5\u53ca<a href=\"https:\/\/ixyzero.com\/blog\/archives\/2707.html\" target=\"_blank\" rel=\"noopener\">netaddr\u6a21\u5757<\/a>\uff0c\u6240\u4ee5\u5199\u8d77\u6765\u5f88\u7b80\u5355\uff09\uff0c\u540e\u6765\u53d1\u73b0Java\u91cc\u4e5f\u6709\u76f8\u5173\u6210\u719f\u7684jar\u5305\uff0c\u6240\u4ee5\uff0c\u4e5f\u5f88\u7b80\u5355\u3002\u3002\u3002<\/p>\n<h4 id=\"id-\u6a21\u677f-\u6b63\u6587\uff1a\">\u6b63\u6587\uff1a<\/h4>\n<h5 id=\"id-\u6a21\u677f-\u53c2\u8003\u89e3\u7b54\uff1a\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n<p># SubnetUtils<br \/>\n<a href=\"http:\/\/commons.apache.org\/proper\/commons-net\/javadocs\/api-3.6\/index.html\">http:\/\/commons.apache.org\/proper\/commons-net\/javadocs\/api-3.6\/index.html<\/a><\/p>\n<p># <strong>IpAddressMatcher<\/strong><br \/>\n<a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/4.2.4.RELEASE\/apidocs\/org\/springframework\/security\/web\/util\/matcher\/IpAddressMatcher.html\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.spring.io\/spring-security\/site\/docs\/4.2.4.RELEASE\/apidocs\/org\/springframework\/security\/web\/util\/matcher\/IpAddressMatcher.html<\/a><\/p>\n<pre class=\"lang:default decode:true \"># pom.xml\r\n&lt;dependency&gt;\r\n\t&lt;groupId&gt;org.springframework.security&lt;\/groupId&gt;\r\n\t&lt;artifactId&gt;spring-security-web&lt;\/artifactId&gt;\r\n\t&lt;version&gt;4.2.3.RELEASE&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n\r\n# test.java\r\nimport org.springframework.security.web.util.matcher.IpAddressMatcher;\r\n\r\nprivate boolean matches(String ip, String subnet) {\r\n    IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet);\r\n    return ipAddressMatcher.matches(ip);\r\n}<\/pre>\n<p>&amp;<\/p>\n<pre class=\"lang:default decode:true \">public class IpCheckMatching {\r\n    \/**\r\n     * check if IP address match pattern\r\n     *\r\n     * @param pattern\r\n     *            *.*.*.* , 192.168.1.0-255 , *\r\n     * @param address\r\n     *            - 192.168.1.1&lt;BR&gt;\r\n     *            &lt;code&gt;address = 10.2.88.12  pattern = *.*.*.*   result: true&lt;BR&gt;\r\n     *                address = 10.2.88.12  pattern = *   result: true&lt;BR&gt;\r\n     *                address = 10.2.88.12  pattern = 10.2.88.12-13   result: true&lt;BR&gt;\r\n     *                address = 10.2.88.12  pattern = 10.2.88.13-125   result: false&lt;BR&gt;&lt;\/code&gt;\r\n     * @return true if address match pattern\r\n     *\/\r\n    public static boolean checkIPMatching(String pattern, String address)\r\n    {\r\n        if (pattern.equals(\"*.*.*.*\") || pattern.equals(\"*\"))\r\n            return true;\r\n\r\n        String[] mask = pattern.split(\"\\\\.\");\r\n        String[] ip_address = address.split(\"\\\\.\");\r\n        for (int i = 0; i &lt; mask.length; i++)\r\n        {\r\n            if (mask[i].equals(\"*\") || mask[i].equals(ip_address[i]))\r\n                continue;\r\n            else if (mask[i].contains(\"-\"))\r\n            {\r\n                int min = Integer.parseInt(mask[i].split(\"-\")[0]);\r\n                int max = Integer.parseInt(mask[i].split(\"-\")[1]);\r\n                \/\/ if (max &gt; 255) max = 255;\r\n                int ip = Integer.parseInt(ip_address[i]);\r\n                if (ip &lt; min || ip &gt; max)\r\n                    return false;\r\n            }\r\n            else\r\n                return false;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n        String ipPattern = \"*,*.*.*.*,10.2.88.12,10.2.88.12-13,10.2.88.5-125,10.2.88.13-256\"; \/\/byte\u7c7b\u578b\u6700\u5927\u503c(127)\r\n        String ipStr = \"10.2.88.12\";\r\n        for (String ip: ipPattern.split(\",\")) {\r\n            System.out.print(ipStr + \" in \" + ip + \" ?\\t\");\r\n            System.out.println(checkIPMatching(ip, ipStr));\r\n        }\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h5 id=\"id-\u6a21\u677f-\u53c2\u8003\u94fe\u63a5\uff1a\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<ul>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/577363\/does-anyone-know-a-java-component-to-check-if-ip-address-is-from-particular-netw\">https:\/\/stackoverflow.com\/questions\/577363\/does-anyone-know-a-java-component-to-check-if-ip-address-is-from-particular-netw<\/a><\/li>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/17853063\/how-can-i-detect-if-an-ip-is-in-a-network\">https:\/\/stackoverflow.com\/questions\/17853063\/how-can-i-detect-if-an-ip-is-in-a-network<\/a><\/li>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/2942299\/converting-cidr-address-to-subnet-mask-and-network-address\">https:\/\/stackoverflow.com\/questions\/2942299\/converting-cidr-address-to-subnet-mask-and-network-address<\/a><\/li>\n<li><a href=\"https:\/\/coderwall.com\/p\/iginpq\/validating-subnet-and-cidr-format-in-java\">https:\/\/coderwall.com\/p\/iginpq\/validating-subnet-and-cidr-format-in-java<\/a><\/li>\n<li><a href=\"http:\/\/www.java2s.com\/Code\/Java\/Network-Protocol\/CheckifIPaddressmatchpattern.htm\">\u68c0\u67e5IP\u548c\u533a\u95f4\u8303\u56f4\u5339\u914d<\/a><\/li>\n<li><a href=\"http:\/\/www.sghaida.com\/java-library-for-ipsubnet-calculator\/\">\u7eafJava\u5b9e\u73b0\u7684IP\u5b50\u7f51\u8ba1\u7b97\u5668<\/a><\/li>\n<\/ul>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u529f\u80fd\u5f00\u53d1\u9700\u8981\uff0c\u5b66\u4e60Java\u9700\u8981\uff08\u4e4b\u524d\u6709\u5199\u8fc7Python\u7248\u672c\u7684\uff0c\u56e0\u4e3aPython\u672c\u8eab\u7684\u7279 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,7,12],"tags":[1079,61,1078],"class_list":["post-3853","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-programing","category-tools","tag-ipaddressmatcher","tag-java","tag-subnetutils"],"views":6452,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=3853"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3853\/revisions"}],"predecessor-version":[{"id":3854,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3853\/revisions\/3854"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=3853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=3853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=3853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}