端口检查是否开放
序
今早上班,老婆说她们楼层的护士长又作妖。孕妇护士服领用申请不签字,又推脱说下星期再说。MD你要推脱你就早直接这样说啊,干嘛说要找总护士长签字,去了被总护士长怼一顿,说找楼层。一老护士还天天臭美,打玻尿酸,很多其他事情也是,一点担当都没有,占着茅坑不拉屎。正好最近准备研究下网络安全,于是就研究下他们医院的官网,看看是什么鬼,有什么漏洞没有,一般黑客肯定是扫描端口,看端口开放情况。
一、扫描端口测试
平常我们自己检查服务器的端口是否开放就是使用telnet这个命令,于是就想这端口不就是从0-65535吗,挨个telnet呗。预售首先想到的是直接执行这个命令,一般的命令执行可以使用Process process = Runtime.getRuntime().exec(shStr);先来个ping的命令大家看看,上代码:
public class ShellTest {
Logger log = Logger.getAnonymousLogger();
public static void runShell(String shStr) throws Exception {
Process process = Runtime.getRuntime().exec(shStr);
InputStream inputStream = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "gb2312"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
public static void main(String[] arge) throws Exception {
System.out.println("-------start----");
String shellStr = "ping -t www.hbfy.com";
ShellTest t = new ShellTest();
t.runShell(shellStr);
System.out.println("-----end------");
}
}
结果:
呵呵,看到没,延时还蛮低。
二、telnet初试
于是修改命令为telnet ip 8000端口,之前已经使用Wappalyzer看到官网用的web服务器与js库了,以及服务器的操作系统。
修改后重新run测试类,效果:
纳里,居然是这种效果。容我喝杯19年的水静静。
度娘说这个命令可以传字符串数组,于是修改下代码:
runShell的入参改为string[],把命令分开写,正常是先cmd,然后telnent,所以:
一直没有下文了,后来又又说win NT6.0以后,就不允许调用telnet了。
三、common-net第三方库
考虑到每个端口要是等超时,或异常再进行下一个,那就太漫长了,于是就用多线程呗(多线程之前也分享过了)。
多线程类:
public class PortScanThread extends Thread {
Logger log = Logger.getAnonymousLogger();
private String ip;
private Integer port;
private Integer start;
private Integer end;
private Integer sleepTime;
public PortScanThread(String ip,Integer port,Integer start,Integer end,Integer sleepTime){
this.ip = ip;
this.port = port;
this.start = start;
this.end = end;
this.sleepTime = sleepTime;
}
public void run() {
TelnetClient telnet = new TelnetClient();
if(start != null && end != null) {
for(int tmpPort = start;tmpPort < end;tmpPort++) {
try {
telnet.connect(ip, tmpPort);
if(telnet.isConnected()) {
System.out.println("目标机器【"+ ip +"】端口"+tmpPort+"开放");
telnet.disconnect();
}
if(sleepTime != null) {
PortScanThread.sleep(sleepTime);
}
} catch (Exception e) {
System.out.println("目标机器【"+ ip +"】端口"+tmpPort+"未开放");
}
}
}else {
try {
telnet.connect(ip, port);
if(telnet.isConnected()) {
System.out.println("目标机器【"+ ip +"】端口"+port+"开放");
telnet.disconnect();
}
} catch (Exception e) {
System.out.println("目标机器【"+ ip +"】端口"+port+"未开放");
}
}
}
}
一个线程里循环的效果:
多线程的效果:
就是这个等待时间有点长,这个telnet没有超时时间设置,后面封装可以自己做命令发出时间记时间,超时就默认未开放。租用可以提高性能。
四、总结
做完这些发现端口开放的很少,而且目前我也不知道端口开放下一步可以干啥。网络方面不擅长啊,回去得找本书看看。有NB的攻防朋友,求带。