版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工程项目实训报告(2015届)学院名称计算机与信息学院专业(班级)信息安全11-1姓名(学号)王佳淼20112914指导教师实训地点起止时间程克勤2014.12-2015.1实习计划及完成情况1、2014.12.1-2014.12.7阅读入侵攻击和异常检测的相关论文10篇(完成)2、2014.12.8-2014.12.14查看NSFOCUS网站即NIDS网络入侵检测系统的日志文件和抓到的异常数据包,导出一定量的数据包。(完成)网址为:81/user/requireLogin3、2014.12.15-2014.12.21选择入侵攻击和异常检测的相关论文中的方法,对导出的数据包信息进行整理分析。(完成)4、2014.12.22-2014.12.28整理对导出数据包的分析结果,在分析结果上建立图表。完成实验报告的编写。(完成)实习报告见附页学生签名:年月日单位指导教师考核意见校内指导教师意见成绩评定(百分制或五级制):(60分以上为考核通过)单位指导教师签名:单位签章:年月日院系意见领导签名(单位签章):年月日附页:合肥工业大学计算机与信息学院课程设计报告课程:创新工程实训专业班级:信息安全11-1学号:20112914姓名:王佳淼2014年12月摘要信息技术的普及给生活带来方便的同时也带来了漏洞产生的可能信息安全漏洞是信息系统在设计实现配置运行过程中有意无意产生的缺陷恶意主体利用这些缺陷会对信息系统的安全造成损害影响信息系统及信息的安全属性当前大量的网络失泄密案件和信息安全问题均与漏洞的存在。计算机联网技术的发展改变了以单机为主的计算模式。但是,网络入侵的风险性和机会也相应地急剧增多,设计安全措施来防范未经授权访问系统的资源和数据?是当前网络安全领域的一个十分重要而迫切的问题,目前,要想完全避免安全事件的发生并不太现实>网络安全人员所能做到的只能是尽力发现和察觉入侵及入侵企图,以便采取有效的措施来堵塞漏洞和修复系统,这样的研究称为入侵检测。为此目的所研制的系统就称为入侵检测系统,本实验将论述网络安全存在的漏洞和潜在的威胁。一个安全系统至少应该满足用户系统的保密性U完整性及可用性要求。但是,随着网络连接的迅速扩展,特别是互联网大范围的开放以及金融领域网络的接入。越来越多的系统遭到入侵攻击的威胁。这些威胁大多是通过挖掘操作系统和应用服务程序的弱点或者缺陷来实现的。1988年的蠕虫事件就是一个很好的实例。TOC\o"1-3"\h\u5294一、实验目的 -1-320821.引言 -1-90392.研究现状 -1-657二、实验方法 -1-241411.方法介绍 -1-222712.方法原理 -2-8168三、实验结果及分析 -2-266591.结果图表 -3-129942.结果分析 -4-11241.结果图表 -4-267982.结果分析 -5-100291.结果图表 -5-12262.结果分析 -5-202461.结果图表 -5-316022.结果分析 -7-303521.结果图表 -7-242782.结果分析 -9-190991.结果图表 -9-177182.结果分析 -10-226771.结果图表 -10-77022.结果分析 -11-29481四、实验感想 -11-21985五、附录:java源代码 -12-204361.从excel中导入 -12-255582.数据结构模型初始化 -13-106713.余弦相似度计算 -15-317994.统计模块 -16-233811.类别统计 -16-125572.时间计算 -18-125703.ip统计及ip归属地查询 -18-240714.危险程度统计 -23-322465.端口统计 -24-实验目的引言通现在网络攻击手段不断变化,导致网络入侵检测与防御机制需不断更新。由于正常流量与入侵流量常常容易混淆,致使入侵检测系统常发出大量的虚警,因此提升网络入侵检测系统的报警正确率是网络安全管理的一个非常重要的课题。研究现状漏洞分类是深入进行漏洞分析的前提,漏洞分类的目的是构建一种层次化的分类形式使得能充分地了解各种漏洞信息增强对漏洞本质的理解更好地消除漏洞和发现未知漏洞。网络入侵的检测方法可以分为两大类,即误用检测和异常检测误用检测是在假设底层系统受到攻击的情况下,在观察网络流量的基础上,明确定义恶意行为的攻击模式在异常行为检测中,定义正常行为模式或者是边缘行为,如果任何异常行为的出现在被描述的行为范围之外,就可以认为安全系统受到了攻击这种建立入侵检测的方法被称为异常检测方法。实验方法方法介绍本实验包括了一般的统计方法、基于余弦相似度的聚类、IP归属地查询等方法来进行漏洞分析。2.方法原理基于余弦相似度的聚类研究基于无监督式聚类的入侵检测算法,提出一种无监督式方法来检测和鉴定未知的异常行为该方法不依赖于具有标签的数据流这种无监督的检测采用的是健壮的数据聚类技术,并结合了证据累积的子空间聚类和交互式聚类结果协同的方法来探测性地识别网络数据流量的异常。IP地址信息查询(WHOIS)服务的原理是,RFC812定义了一个非常简单的Internet信息查询协议——WHOIS协议。其基本内容是,先向服务器的TCP端口43建立一个连接,发送查询关键字并加上回车换行,然后接收服务器的查询结果。世界上各级Internet管理机构秉承公开、公正、共享的原则,设立了可以查知IP
地址和域名所有者登记资料的WHOIS服务器,以便所有Internet的使用者排除故障、打击网上非法活动。全世界国际区域性的IP
地址管理机构有四个:ARIN、RIPE、APNIC、LACNIC,他们负责的IP
地址的地理区域如下图所示。四个国际区域性IP
地址管理机构所负责的区域(此图摘自《RIPE2002年度报告》)重要的Internet管理机构和常用的WHOIS服务器机构缩写WHOIS服务器地址机构全名及
地点提供查询内容CERNIC中国教育与科研计算机网网络信息中心(清华大学·中国北京)中国教育网内的IP
地址和.域名信息CNNIC中国互联网络信息中心(中国科学院计算机网络信息中心·中国北京).cn域名(除.)信息INTERNIC互联网络信息中心(美国洛杉矶市MarinadelRey镇).com,.net,.org,.biz,.info,.name域名的注册信息(只给出注册代理公司)ARIN美国Internet号码注册中心(美国弗吉尼亚州Chantilly市)全世界早期网络及现在的美国、加拿大、撒哈拉沙漠以南非洲的IP地址信息APNIC亚洲与太平洋地区网络信息中心(澳大利亚昆士兰州密尔顿镇)东亚(包括中国大陆和台湾)、南亚、大洋洲IP地址注信息RIPE欧州IP
地址注册中心(荷兰阿姆斯特丹)欧洲、北非、西亚地区的IP
地址信息TWNIC台湾互联网络信息中心(中国台湾台北).tw域名和部分台湾岛内IP
地址信息JPNICwhois.nic.ad.jp日本互联网络信息中心(日本东京).jp域名和日本境内的IP
地址信息KRNIC韩国互联网络信息中心(韩国汉城).kr域名和韩国境内的IP
地址信息LACNIC拉丁美洲及加勒比互联网络信息中心(巴西圣保罗)拉丁美洲及加勒比海诸岛IP
地址信息本机上的自动WHOIS服务,是按照下图所示的流程,依次查询若干个WHOIS服务器之后,得到某个IP
地址的WHOIS信息。实验结果及分析聚类的结果结果图表HTTP攻击20869http协议cookie字段超长缓冲区溢出攻击20833http协议认证字段超长溢出攻击40813http协议put命令上传操作40432http服务基本登录认证20381http服务暴力猜测口令攻击web攻击29001web服务远程sql注入攻击可疑行为40402web服务访问etc/passwd文件29002web服务远程跨站脚本执行攻击30364web服务htaccess文件访问10056syn-flood半开tcp连接淹没拒绝服务攻击30061dns服务服务器版版本号请求操作30061dns服务获取服务器版版本号请求操作ftp攻击40044ftp服务anonymous匿名用户认证50031ftp服务普通用户认证成功50045ftp服务用户弱口令认证数据库攻击21369mysql用户验证暴力猜测50447mysql可疑数据库文件下载远程操控50083windows系统远程管理管理工具终端服务用户登录20800microsoftwindows动画光标畸形ani头结构远程栈溢出攻击20132microsoftiis4.0/5.0unicode解码漏洞攻击50458远程控制工具vnc软件连接服务漏洞攻击30041sunrpc服务信息dump查询40301snmp服务试图使用默认public口令访问22796apachestruts远程代码执行漏洞cve-2013-225140123smtp服务邮件转发失败其他40826安全工具360系列软件更新50152socks代理访问操作41017routeradvertisement检测20867novellmessengerserver2.0accept-languageoverflow结果分析聚类结果将全部29种攻击包分成了HTTP攻击、web攻击、ftp攻击、数据库攻击、远程操控、服务漏洞攻击、其他7种类型的攻击。聚类结果是基于余弦相似度的,可以看到,拥有相同的分词多时就会被分到同一类。类别攻击统计1.结果图表2.结果分析由图表可以得出远程操控类的攻击较多,其次是基于某些服务漏洞的攻击。值得注意的是,属于这两种类型的攻击并不多,远程操控类的攻击只有四种,而属于web攻击的攻击有7种,但其总的攻击次数并不多。数据库攻击最少,但属于数据库攻击类型的攻击都是对MySQL数据库进行的攻击,我们可以猜测被攻击的目标机是使用的MySQL数据库或者是装有此数据库。按照小时统计攻击次数1.结果图表2.结果分析由图表可以得出,出去服务漏洞攻击外,其余6中类型的攻击攻击次数比较平均。服务漏洞攻击分为[40301]SNMP服务试图使用默认public口令访问、[40301]SNMP服务试图使用默认public口令访问、[22796]ApacheStruts远程代码执行漏洞(CVE-2013-2251)、[30041]SunRPC服务信息DUMP查询这四种攻击。且其攻击基本集中在中午12点至下午4点左右。在这个时间段,应该加强对这四种攻击的防范。IP统计1.结果图表目的IP被攻击次数210.45.241.*3217ff02::113942.62.48.*116101.4.60.*70106.10.136.*66210.45.242.*25202.123.107.*1060.28.215.*8123.58.180.*7121.251.19.*684.246.112.*4211.151.213.*3222.195.10.*3121.194.0.*2168.63.218.*2218.60.98.*2223.202.68.*2119.75.219.*1206.190.36.*1210.45.240.*1222.23.55.*169.192.2.*1fe80::a86b:f8d0:e713:b0571源IP攻击次数184.105.139.*336124.232.142.*333210.45.241.*297fe80::4255:39ff:fe05:39c1140124.228.83.*8258.221.47.*73134.147.203.*595.196.208.*5293.180.5.*5291.207.5.*4910.16.31.*45122.55.83.*43172.16.27.*40199.203.165.*3610.188.1.*35114.113.55.*35185.41.154.*33117.21.176.*3166.249.65.*30222.195.10.*28218.63.105.*26218.64.118.*26222.88.153.*2544.144.15.*22218.197.119.*21攻击匹配次数184.105.139.*攻击210.45.241.*336124.232.142.*攻击210.45.241.*333fe80::4255:39ff:fe05:39c1攻击ff02::1139210.45.241.*攻击42.62.48.*116124.228.83.*攻击210.45.241.*8258.221.47.*攻击210.45.241.*73210.45.241.*攻击101.4.60.*70210.45.241.*攻击106.10.136.*66134.147.203.*攻击210.45.241.*595.196.208.*攻击210.45.241.*522.结果分析根据表格数据可以得出184.105.139.*、124.232.142.*、210.45.241.*这三个IP段经常对本网络发起攻击。而本网段210.45.241.*IP段被攻击次数最多。另外根据IP攻击的匹配情况可以知道,某些IP,例如184.105.139.*,IP段184.105.139.*只攻击210.45.241.*。所以在210.45.241.*IP段可以重点对184.105.139.*IP段进行防范。IP区域统计1.结果图表国内与海外次数中国296美国53台湾台湾省33未分配或者内网IP26法国13乌克兰6印度尼西亚6德国6荷兰5韩国5俄罗斯4土耳其4加拿大3越南3南非2印度2希腊2摩尔多瓦2罗马尼亚2英国2香港香港特别行政区1以色列1伊朗1冰岛1哥伦比亚1地区1墨西哥1委内瑞拉1孟加拉国1巴西1斯洛伐克1新加坡1泰国1瑞典1立陶宛1菲律宾1马来西亚12.结果分析由表格和圆饼图可以得出不同IP段属于的区域,在根据国内、海外、港台这样划分得到圆饼图。发现海外的IP地址占了三分之一的比重,所以假冒IP地址的可能性很大。攻击等级统计1.结果图表高危编号高危类型次数[20132]MicrosoftIIS4.0/5.0Unicode解码漏洞攻击7[20833]HTTP协议认证字段超长溢出攻击75[20867]NovellMessengerServer2.0Accept-LanguageOverflow1[20869]HTTP协议Cookie字段超长缓冲区溢出攻击37[22796]ApacheStruts远程代码执行漏洞(CVE-2013-2251)1[29001]Web服务远程SQL注入攻击可疑行为2112.结果分析在各种高危、中危、低危三种级别的攻击中,低危的攻击最多。虽然低危攻击的数目多,但是我们对高危攻击进行分析,原因在于高危攻击的数目虽然较低危攻击数目少,但其危险性较高,对网络安全危害较大。高危攻击中,Web服务远程SQL注入攻击可疑行为攻击占了较大比重。我觉得原因在于,SQL注入是一种较其他方式而言更加简单初级的攻击方式。SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串。所以只要网页含有表单,就可以被SQL注入攻击。端口情况统计1.结果图表目的端口被攻击次数338996216157380564533692134731283378080206014044377590152330636999913108892500702688121111144125159021590315944512.结果分析由表格和图片可以得出,3389端口被攻击次数最多。3389端口是Windows2000(2003)Server远程桌面的服务端口,可以通过这个端口,用"远程桌面"等连接工具来连接到远程的服务器。在数据包中,进行远程控制攻击的数目较多,所以3389端口被攻击次数多是可以理解的。由于连接上了,输入系统管理员的用户名和密码后,将变得可以像操作本机一样操作远程的电脑,因此远程服务器一般都将这个端口修改数值或者关闭。这样就可以提高系统的安全性能。实验感想经过本次实验,对长达4天,一共3000多个数据包进行分析。利用基于余弦相似度的聚类方法,将攻击分为7种类型的攻击。再统计每天0-24的攻击情况,可以得到很多有用的信息。完全无监督式异常检测算法拥有很多的优点,它使用专门的无标签的数据来检测和刻画网络异常行为,而并不需要任何种类的特征特殊模式的假定或者数据的正态分布这些可以允许检测先前没有见过的异常行为,即使是不使用统计学习或者人工分析决策的制定,也可以做到。例如类型5,远程操控类型的攻击就是通过聚类而来,正是因为有这个聚类结果,我们才发现远程操控类型的攻击的发生时间是有规律性的,这样可以帮助我们进行这类攻击的防范。另外对其余数据信息的统计,也能获取到本机漏洞所在,例如在对端口号进行统计时,发现3389号端口被攻击次数最多。若被攻击主机不是服务器,可以考虑关闭3389号端口,及关闭远程控制的服务,以提高系统安全性。若被攻击主机是服务器,则可以考虑修改端口数值,以避开攻击。在高危级别的攻击中,SQL注入攻击的数目较多,而且,从获取的数据包可以得到使用的数据库应该是MySQL数据库。所以应该加强这方面的防范。想要获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验证。在对IP区域进行检测时候,发现海外地址较多。IP信息的查询是通过淘宝API接口进行的,阿里巴巴出口通的IP并没有相应监管机构核实,所以很有可能是假冒的IP地址,即设置了代理服务器。附录:java源代码从excel中导入packageother;importjava.io.File;importjxl.Cell;importjxl.Sheet;importjxl.Workbook;publicclassExcelOperating{ publicstaticString[]readexcel(Stringfname){ Stringstring[]=newString[3688]; try{Workbookbook=Workbook.getWorkbook(newFile(fname));Sheetsheet=book.getSheet(0);for(inti=0;i<sheet.getRows();i++){ string[i]="";for(intj=0;j<sheet.getColumns();j++){Cellcell=sheet.getCell(j,i+1);if(j==0)string[i]=cell.getContents()+"";elsestring[i]+=cell.getContents()+"";}//System.out.println();}book.close();}catch(Exceptione){System.out.println(e);} System.out.println(string.length); System.out.println(fname+"readcompelete"); returnstring; }}数据结构模型初始化packagemodel;importjava.io.BufferedReader;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importcalculate.CategoryStatictics;importcalculate.IPcalculate;importcalculate.LevelCalculate;importcalculate.PortCalculate;importother.ExcelOperating;publicclassADmodel{ publicStringlevel; publicStringtime; publicStringcontent; publicStringsIP; publicStringdIP; publicStringsport; publicStringdport; publicStringcontinuoustimes; publicStringcategory; publicstaticvoidmain(Stringarg[])throwsIOException{ ArrayList<ADmodel>models=init("dataset.xls","category.txt"); PortCalculate.ComS(models); /* FileWriterfileWriter=newFileWriter("dataset.txt"); for(ADmodelaDmodel:models){ fileWriter.write(aDmodel.content); fileWriter.write("\r\n"); } fileWriter.close();*/ } publicstaticArrayList<ADmodel>init(Stringfname,Stringcafile){ String[]aStrings=ExcelOperating.readexcel(fname); ArrayList<ADmodel>models=newArrayList<ADmodel>(); //SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH"); Map<String,String>map=newHashMap<String,String>(); try{ FileReaderfileReader=newFileReader(cafile); BufferedReaderbufferedReader=newBufferedReader(fileReader); StringtempString; while((tempString=bufferedReader.readLine())!=null){ StringaString[]=tempString.split(""); map.put(aString[0],aString[1]); } for(inti=0;i<aStrings.length;i++){ ADmodelad=newADmodel(); String[]b=aStrings[i].split(""); ad.level=b[0]; ad.time=b[1].substring(0,13); ad.content=b[2]; ad.sIP=b[3]; ad.sport=b[4]; ad.dIP=b[6]; ad.dport=b[7]; ad.continuoustimes=b[11]; ad.category=map.get(b[2].substring(1,6)); models.add(ad); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } System.err.println("initcomplete"); returnmodels; }}余弦相似度计算packageother;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;publicclassSimi{ //余弦值计算未添加权重 publicstaticdoublegetSimilarDegree(Stringstr1,Stringstr2){ //创建向量空间模型,使用map实现,主键为词项,值为长度为2的数组,存放着对应词项在字符串中的出现次数 Map<String,int[]>vectorSpace=newHashMap<String,int[]>(); int[]itemCountArray=null;//为了避免频繁产生局部变量,所以将itemCountArray声明在此 //以空格为分隔符,分解字符串 StringstrArray[]=str1.split(""); for(inti=0;i<strArray.length;++i){ if(vectorSpace.containsKey(strArray[i])) ++(vectorSpace.get(strArray[i])[0]); else{ itemCountArray=newint[2]; itemCountArray[0]=1; itemCountArray[1]=0; vectorSpace.put(strArray[i],itemCountArray); } } strArray=str2.split(""); for(inti=0;i<strArray.length;++i){ if(vectorSpace.containsKey(strArray[i])) ++(vectorSpace.get(strArray[i])[1]); else{ itemCountArray=newint[2]; itemCountArray[0]=0; itemCountArray[1]=1; vectorSpace.put(strArray[i],itemCountArray); } } //计算相似度 doublevector1Modulo=0.00;//向量1的模 doublevector2Modulo=0.00;//向量2的模 doublevectorProduct=0.00;//向量积 Iteratoriter=vectorSpace.entrySet().iterator(); while(iter.hasNext()){ Map.Entryentry=(Map.Entry)iter.next(); itemCountArray=(int[])entry.getValue(); vector1Modulo+=itemCountArray[0]*itemCountArray[0]; vector2Modulo+=itemCountArray[1]*itemCountArray[1]; vectorProduct+=itemCountArray[0]*itemCountArray[1]; } vector1Modulo=Math.sqrt(vector1Modulo); vector2Modulo=Math.sqrt(vector2Modulo); //返回相似度 return(vectorProduct/(vector1Modulo*vector2Modulo)); }}4.统计模块1.类别统计packagecalculate;importjava.util.ArrayList;importjava.util.Date;importjava.util.Map;importjava.util.TreeMap;importjava.util.Map.Entry;importmodel.ADmodel;importmodel.InitTimeMap;publicclassCategoryStatictics{ publicstaticvoidComS(ArrayList<ADmodel>models){ Map<String,Integer>map=newTreeMap<String,Integer>(); map=InitTimeMap.init(map); for(ADmodelaDmodel:models){ if(!map.containsKey(aDmodel.time))map.put(aDmodel.time,1); elsemap.put(aDmodel.time,map.get(aDmodel.time)+1); } for(Entry<String,Integer>entry:map.entrySet()){ //System.out.println(entry.getKey()); System.out.println(entry.getValue()); } } publicstaticvoidCategoryS(ArrayList<ADmodel>models,Stringcategory){ Map<String,Integer>map=newTreeMap<String,Integer>(); map=InitTimeMap.init(map); for(ADmodelaDmodel:models){ if(aDmodel.category.equals(category)){ if(!map.containsKey(aDmodel.time))map.put(aDmodel.time,1); elsemap.put(aDmodel.time,map.get(aDmodel.time)+1); } } for(Entry<String,Integer>entry:map.entrySet()){ //System.out.println(entry.getKey()); System.out.println(entry.getValue()); } } publicstaticvoidCategoryShours(ArrayList<ADmodel>models,Stringcategory){ Map<String,Integer>map=newTreeMap<String,Integer>(); map=InitTimeMap.inithours(map); for(ADmodelaDmodel:models){ if(aDmodel.category.equals(category)){ StringtimeString=aDmodel.time.substring(11,13); if(!map.containsKey(timeString))map.put(timeString,1); elsemap.put(timeString,map.get(timeString)+1); } } for(Entry<String,Integer>entry:map.entrySet()){ //System.out.println(entry.getKey()); System.out.println(entry.getValue()); } }}时间计算packageother;importjava.util.Calendar;importjava.util.Date;publicclassDateOperate{ publicstaticDatetimeplus(Datea){ Calendarcalendar=Calendar.getInstance(); calendar.setTime(a); //calendar.add(Calendar.HOUR,1);//对小时数进行+1操作 calendar.add(Calendar.HOUR_OF_DAY,1); a=calendar.getTime(); returna; }}ip统计及ip归属地查询packagecalculate;importjava.io.BufferedReader;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.io.InputStreamReader;import.URL;import.URLConnection;importjava.util.ArrayList;importjava.util.Map;importjava.util.TreeMap;importjava.util.Map.Entry;importjavax.xml.transform.Templates;importmodel.ADmodel;importmodel.InitTimeMap;publicclassIPcalculate{ publicstaticvoidcalculate(ArrayList<ADmodel>models){ Map<String,Integer>map=newTreeMap<String,Integer>(); String[]aStrings=null; StringsipString=null; for(ADmodelaDmodel:models){ if(!aDmodel.sIP.subSequence(0,1).equals("f")){ aStrings=aDmodel.sIP.split("\\."); sipString=aStrings[0]+"."+aStrings[1]+"."+aStrings[2] +".*"+"攻击"; }else{ sipString=aDmodel.sIP+"攻击"; } if(!aDmodel.dIP.subSequence(0,1).equals("f")){ aStrings=aDmodel.dIP.split("\\."); sipString+=aStrings[0]+"."+aStrings[1]+"." +aStrings[2]+".*"; }else{ sipString+=aDmodel.dIP; } if(!map.containsKey(sipString)) map.put(sipString,1); else map.put(sipString,map.get(sipString)+1); } for(Entry<String,Integer>entry:map.entrySet()){ //System.out.println(entry.getKey()); //System.out.println(entry.getValue()); } } publicstaticStringipbelong(ArrayList<ADmodel>models){ Stringstring=""; Map<String,String>map=newTreeMap<String,String>(); Stringtemp=""; try{ FileReaderfileReader=newFileReader("ip.txt"); BufferedReaderbufferedReader=newBufferedReader(fileReader); while((temp=bufferedReader.readLine())!=null){ StringaString=temp; temp=temp.substring(0,temp.length()-1)+"1"; if(!map.containsKey(temp)){ System.out.println(aString); Stringipc=ip(temp); map.put(temp,ipc); System.out.println(ipc); }else{ continue; } } for(Entry<String,String>entry:map.entrySet()){ System.out.println(entry.getKey()); System.out.println(entry.getValue()); } }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnstring; } publicstaticStringip(Strings){ //查询IP的接口:88/?app=ip.get&ip=40&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json Stringip=s; Stringstr_url=":88/?app=ip.get&ip=" +ip +"&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"; str_url="/service/getIpInfo.php?ip="+ip; Stringstring=""; try{ URLurl=newURL(str_url); URLConnectionconn; conn=url.openConnection(); BufferedReaderretun=newBufferedReader(newInputStreamReader( conn.getInputStream())); retun=newBufferedReader(newInputStreamReader(url.openStream())); //这里返回的是一个JSON的格式,自己解析吧。 //System.out.println(retun.readLine()); string=retun.readLine(); String[]aString=string.split("\\\""); inti=0; string=""; string+=aString[7]+aString[23]+aString[31]; retun.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returndecodeUnicode(string); } publicstaticStringdecodeUnicode(StringtheString){ charaChar; intlen=theString.length(); StringBufferoutBuffer=newStringBuffer(len); for(intx=0;x<len;){ aChar=theString.charAt(x++); if(aChar=='\\'){ aChar=theString.charAt(x++); if(aChar=='u'){ //Readthexxxx intvalue=0; for(inti=0;i<4;i++){ aChar=theString.charAt(x++); switch(aChar){ case'0': case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': case'9': value=(value<<4)+aChar-'0';
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 秋日郊游记趣写秋游的见闻和感受的作文(5篇)
- 企业持久发展保障承诺函8篇
- 工程项目成本控制方案解析
- 传统节日习俗的背后故事话题作文5篇范文
- 合同保障诚信守护承诺书(5篇)
- 全球气候适应策略承诺函9篇范文
- 小学数学复习计划与难点突破方案
- 金鱼日记动态课件
- 金钱与我课件
- 老师我想对您说:写人作文(10篇)
- 《乘用车白车身轻量化设计与评价方法》
- 铸造行业技术研发管理制度
- 中频治疗仪的操作流程
- 《弱电知识培训》课件
- 托儿所幼儿园卫生保健工作规范
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 《同步备课:太阳能小台灯》参考课件
- 直肠阴道瘘诊疗指南的更新
- 五年级数学上册人教版第六单元《多边形的面积》(单元解读)
- 日立HGP电梯调试
- 病案管理考核标准表格2022版
评论
0/150
提交评论