import java.net.*;<br /> import java.io.*;<br /> import java.awt.*;<br /> import java.awt.event.*;<br /> import javax.swing.*;</p><p> public class TCPThread extends Thread...{</p><p> public static InetAddress hostAddress;</p><p> //最小的連接埠號碼<br /> public static int MIN_port;<br /> //最大的連接埠號碼<br /> public static int MAX_port;</p><p> //線程總數<br /> private int threadnum; </p><p> //查詢方式:0為ip;1為主機名稱<br /> public static int type;<br /> //ip地址前3位<br /> public static int ip1;<br /> //ip地址4~6位<br /> public static int ip2;<br /> //ip地址7~9位<br /> public static int ip3;<br /> //起始ip地址的最後4位<br /> public static int ipstart;<br /> //結束ip地址的最後4位<br /> public static int ipend;<br /> //完整的ip地址<br /> public static String ipAll;<br /> //掃描的主機名稱或ip<br /> String hostname = "";<br /> //連接埠的類別<br /> String porttype = "0";</p><p> /**//*<br /> *建構函式<br /> */<br /> public TCPThread(String name,int threadnum)...{<br /> super(name);<br /> this.threadnum = threadnum;<br /> } </p><p> /**//*<br /> *運行函數<br /> */<br /> public void run() ...{</p><p> //ip地址<br /> int h = 0;<br /> //連接埠號碼<br /> int i = 0;<br /> Socket theTCPsocket;<br /> //根據ip地址進行掃描<br /> if(type == 0)...{</p><p> //ip地址迴圈掃描<br /> for(h = ipstart; h <=ipend; h++)...{</p><p> //組成完整的ip地址<br /> ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;<br /> hostname = ipAll;</p><p> try...{<br /> //在給定主機名稱的情況下確定主機的 IP 位址<br /> hostAddress=InetAddress.getByName(ipAll);<br /> }<br /> catch(UnknownHostException e)...{<br /> }</p><p> //不同的連接埠迴圈掃描<br /> for (i = MIN_port+threadnum; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText()); i += Integer.parseInt(ThreadScan.maxThread.getText()))...{<br /> try...{<br /> theTCPsocket=new Socket(hostAddress,i);<br /> theTCPsocket.close();<br /> ThreadScan.Result.append(hostname+":"+i);</p><p> //判斷連接埠的類別<br /> switch(i)...{<br /> case 21:<br /> porttype = "(FTP)";<br /> break;<br /> case 23:<br /> porttype = "(TELNET)";<br /> break;<br /> case 25:<br /> porttype = "(SMTP)";<br /> break;<br /> case 80:<br /> porttype = "(HTTP)";<br /> break;<br /> case 110:<br /> porttype = "(POP)";<br /> break;<br /> case 139:<br /> porttype = "(netBIOS)";<br /> break;<br /> case 1433:<br /> porttype = "(SQL Server)";<br /> break;<br /> case 3389:<br /> porttype = "(Terminal Service)";<br /> break;<br /> case 443:<br /> porttype = "(HTTPS)";<br /> break;<br /> case 1521:<br /> porttype = "(Oracle)";<br /> break;<br /> }</p><p> //連接埠沒有特定類別<br /> if(porttype.equals("0"))...{<br /> ThreadScan.Result.append("/n");<br /> }<br /> else...{<br /> ThreadScan.Result.append(":"+porttype+"/n");<br /> }<br /> }<br /> catch (IOException e)...{<br /> }<br /> }<br /> }</p><p> //掃描完成後,顯示掃描完成,並將“確定”按鈕設定為可用<br /> if (i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getText()))...{<br /> ThreadScan.Result.append("/n"+"掃描完成...");</p><p> //將"確定"按鈕設定成為可用<br /> if(!ThreadScan.Submit.isEnabled())...{<br /> ThreadScan.Submit.setEnabled(true);<br /> }<br /> }<br /> }</p><p> //按照主機名稱進行連接埠掃描<br /> if(type == 1)...{<br /> for (i = MIN_port+threadnum; i < MAX_port+Integer.parseInt(ThreadScan.maxThread.getText()); i += Integer.parseInt(ThreadScan.maxThread.getText()))...{<br /> try...{<br /> theTCPsocket=new Socket(hostAddress,i);<br /> theTCPsocket.close();<br /> ThreadScan.Result.append(" "+i);<br /> switch(i)...{<br /> case 21:<br /> porttype = "(FTP)";<br /> break;<br /> case 23:<br /> porttype = "(TELNET)";<br /> break;<br /> case 25:<br /> porttype = "(SMTP)";<br /> break;<br /> case 80:<br /> porttype = "(HTTP)";<br /> break;<br /> case 110:<br /> porttype = "(POP)";<br /> break;<br /> case 139:<br /> porttype = "(netBIOS)";<br /> break;<br /> case 1433:<br /> porttype = "(SQL Server)";<br /> break;<br /> case 3389:<br /> porttype = "(Terminal Service)";<br /> break;<br /> case 443:<br /> porttype = "(HTTPS)";<br /> break;<br /> case 1521:<br /> porttype = "(Oracle)";<br /> break;<br /> }</p><p> //連接埠沒有特定類別<br /> if(porttype.equals("0"))...{<br /> ThreadScan.Result.append("/n");<br /> }<br /> else...{<br /> ThreadScan.Result.append(":"+porttype+"/n");<br /> }<br /> }<br /> catch (IOException e)...{<br /> }<br /> }</p><p> //掃描完成後,顯示掃描完成,並將【確定】按鈕設定為可用<br /> if (i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getText()))...{<br /> ThreadScan.Result.append("/n"+"掃描完成...");</p><p> //將【確定】按鈕設定成為可用<br /> if(!ThreadScan.Submit.isEnabled())...{<br /> ThreadScan.Submit.setEnabled(true);<br /> }<br /> }<br /> }<br /> }<br />}