没什么好说的了吧!
之前写了个 JSP的 现在找个ASPX的实现了! 还给自己一个心愿~~ 说起来也真头疼ASPX跟 JSP/SERVLET的生命周期 不一样~ ASPX页面的对象浏览完了自动会销毁... 而JSP/SERLVET的是通过容器反射调用对象的service方法~ 所以页面的成员属性不会释放!ASPX则不同了! 所以没办法只能使用类里面的静态成员靠! 先看看下面图片吧!
***********************
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Collections" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Net.Sockets" %>
<script runat="server">
//author : kj021320(nonamed) //blog : [url]http://blog.csdn.net/kj021320/[/url] static ArrayList threadScheduler = new ArrayList();//JOB Scheduler public class JobConsole { public ArrayList subThreadsPool = new ArrayList();//sub Threads pool public int startPort;//开始端口 public int port;//循环端口 public int endPort;//结束端口 public int state = 0;//0进行 1暂停 2停止 public string host;//IP地址 public string errMsg = "";//错误信息 public StringBuilder succMsg = new StringBuilder();//成功信息 public int threadCount = 0; public void start() { for (int c = 1; c <= threadCount; c++) { Thread thread = new Thread(new ThreadStart(this.run)); subThreadsPool.Add(thread); thread.Start(); thread = null; } } //启动线程 public void run() { int localPort = 0; while (localPort <= endPort) { while (state == 1) { Thread.Sleep(5000);} if (state == 2) { return; } lock (this) { localPort = port++; } try { TcpClient tcpClient = new TcpClient(); tcpClient.Connect(host, localPort); lock (succMsg) { succMsg.Append(localPort + ","); } tcpClient.Close(); } catch (SocketException se) { if (se.ErrorCode == 10051 || se.ErrorCode == 10052 || se.ErrorCode == 10014) { this.state = 2; } errMsg = se.Message; } } state = 2; } }
</script>
<% String action=Request.QueryString["Action"]; if (action!=null && !"".Equals(action)) { if("AddToScan".Equals(action)) { string host = Request.QueryString["host"];//取得主机名字 string port = Request.QueryString["port"];//取得开始port string endPort = Request.QueryString["endPort"];//取得结束port string thread = Request.QueryString["thread"];//取得线程 JobConsole jc = new JobConsole(); jc.host = host; jc.port = Convert.ToInt32(port); jc.startPort = jc.port; jc.endPort = Convert.ToInt32(endPort); jc.threadCount = Convert.ToInt32(thread); threadScheduler.Add(jc); jc.start(); jc = null; }else if ("del".Equals(action)) { string id = Request.QueryString["id"]; if (id != null) { int num = Convert.ToInt32(id); JobConsole jc = (JobConsole)threadScheduler[num]; jc.state = 2;//更改状态为stop threadScheduler.RemoveAt(num);//移除集合里面的对象 jc.subThreadsPool.Clear();//清楚线程池里面的所有线程 jc = null; } } else if ("Run".Equals(action)) { string id = Request.QueryString["id"]; if(id!=null) { int num = Convert.ToInt32(id); JobConsole jc = (JobConsole)threadScheduler[num]; jc.state = 0;//running 状态 jc.port = jc.startPort; jc.start();//重新开始 jc = null; } } else if ("Pause".Equals(action)) { string id = Request.QueryString["id"]; if (id != null) { int num = Convert.ToInt32(id); JobConsole jc = (JobConsole)threadScheduler[num]; jc.state = 1;//pause 状态 jc = null; } }else if ("Continue".Equals(action)) { string id = Request.QueryString["id"]; if (id != null) { int num = Convert.ToInt32(id); JobConsole jc = (JobConsole)threadScheduler[num]; jc.state = 0;//running 状态 jc = null; } }else { Response.Write("<TABLE><TR><TD>JOB</TD><TD>THREAD</TD><TD>STATE</TD><TD>HOST</TD><TD>SCANNING...</TD><TD>END PORT</TD><TD>SUCC MSG</TD><TD>ERR MSG</TD><TD>ACTION</TD></TR>"); int count=threadScheduler.Count; for(int i=0;i<count;i++){ threadScheduler.TrimToSize(); JobConsole jc=(JobConsole)threadScheduler[i]; String scanState=""; String operate=""; if(jc!=null) { switch(jc.state){ case 0:scanState="running";operate="<input type=button value=Pause onclick=\"ThreadOperate('Pause',"+i+")\">";break; case 1:scanState="pause";operate="<input type=button value=Continue onclick=\"ThreadOperate('Continue',"+i+")\">";break; case 2:scanState="stop";operate="<input type=button value=Run onclick=\"ThreadOperate('Run',"+i+")\">";break; } Response.Write("<TR><TD>"+i+"</TD><TD>"+jc.threadCount+"</TD>"); Response.Write("<TD>"+scanState+"</TD><TD>"+jc.host+"</TD><TD>"+(jc.port-1)+"</TD><TD>"+jc.endPort+"</TD>"); Response.Write("<TD>"+jc.succMsg+"</TD><TD>"+jc.errMsg+"</TD><TD><input type=button value=Drop onclick='DropThread("+i+");'>"+operate+"</TD></TR>"); jc=null; } } Response.Write("<TR><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD></TR></TABLE>"); } GC.Collect(); Response.End(); return; }
%>
<html xmlns:v="urn:schemas-microsoft-com:vml"> <head> <title>ISTO Extreme .NETScanning 1.0</title> <style type="text/css"> v\:*{behavior:url(#default#VML);position:absolute;} body,td{font-size: 12px;} body,td{font-size:12px;} table{T:expression(this.border='1',this.borderColorLight='Black',this.borderColorDark='White');} input,select{font-size:12px;color:#000000;} input{border-color:"#000000";color:#008800;background-color:#333333;} body{margin-left:0px;margin-top:0px;margin-right:0px;margin-bottom:0px;} td{white-space:nowrap;} a{color:black;text-decoration:none; color:#008800;} </style> <script language="javascript"> //common String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); } String.prototype.ltrim = function() { return this.replace(/(^\s*)/g, ""); } String.prototype.rtrim = function() { return this.replace(/(\s*$)/g, ""); } function createXmlHttpRequest(){//create AJAX CONSOLES if(window.ActiveXObject){ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }else if(window.XMLHttpRequst){ xmlHttp=new XMLHttpRequst(); } } //ref需要信息的组件 function getTheMessage(ref){ if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ var replaceStr; replaceStr=xmlHttp.responseText; replaceStr=replaceStr.trim(); if(replaceStr!=""&&ref){ ref.innerHTML=replaceStr; } return replaceStr; }else{ return ""; } }else{ return ""; } } //str:connection HTTP URL //code:eval the code function openUrlXmlHttpRequstEval(str,code){ url=str; createXmlHttpRequest(); xmlHttp.open("get",url,true); xmlHttp.onreadystatechange=function tmp(){eval(code);}; xmlHttp.send(); } //str:connection HTTP URL //ref:replace the HTML consoles function openUrlXmlHttpRequstReplace(str,ref){ url=str; createXmlHttpRequest(); xmlHttp.open("get",url,true); xmlHttp.onreadystatechange=function tmp(){getTheMessage(ref);}; xmlHttp.send(); } </script> <script language="javascript"> //user define functions //add to scan function post(){ if(S.host.value!=""){ if(!isNaN(S.endPort.value)&&parseInt(S.endPort.value)<=65535){ if(!isNaN(S.port.value)&&parseInt(S.port.value)<=parseInt(S.endPort.value)&&parseInt(S.port.value)>0){ var url="?Action=AddToScan&host="+S.host.value+"&thread="+S.thread.value+"&port="+S.port.value+"&endPort="+S.endPort.value+"&"+Math.random(); openUrlXmlHttpRequstEval(url,"");S.port.value=""; S.host.value="";S.endPort.value=""; alert("add success"); }else{ alert("set start port error"); } }else{ alert("set end port error"); } }else{ alert("HOST can't empty"); } } //view pool function viewSchedulerPool(){ openUrlXmlHttpRequstReplace("?Action="+Math.random(),document.all.pool); } //drop the scanning Thread function DropThread(num){ if(confirm('Are U sure?')){ var url="?Action=del&id="+num+"&"+Math.random(); openUrlXmlHttpRequstEval(url,""); } } function ThreadOperate(ope,id){ if(confirm('Are U sure?')){ var url="?Action="+ope+"&id="+id+"&"+Math.random(); openUrlXmlHttpRequstEval(url,""); } } setInterval("viewSchedulerPool()",3000); </script> </head> <body text="#00ff00" vLink="#008000" aLink="#008000" link="#008000" bgColor="#000000"> <center> Scheduler Pool: <div id="pool"></div> <hr /> <form method="POST" name='S'> HOST:<input type="text" name="host" /> START PORT:<input type="text" name="port" size="4" maxlength="5" /> END PORT:<input type="text" name="endPort" size="4" maxlength="5" /> THREAD:<select name="thread"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option></select> <input type="button" value="AddToScan" name="Action" /> </form> </center> <v:Textbox id=istuFullname style='FONT-SIZE:30;Z-INDEX:3201;FILTER:alpha(opacity=100,style=2) blur(add=0,direction=14,strength=5) wave(add=1,freq=,lightstrength=5,phase=5,strength=2) glow(color=#d9f281,strength=3) ;LEFT:10%;COLOR:#f17a35;FONT-FAMILY:@黑体;TOP:35%' inset='5pt,5pt,5pt,5pt'> - = Information Security Technology Organization = - </v:Textbox> <a onclick="javascript:window.open('http://www.isto.cn');"> <v:Textbox id=istu style="FONT-SIZE:80;Z-INDEX:3177;FILTER:alpha(opacity=100,style=2) blur(add=0,direction=14,strength=5) wave(add=1,freq=,lightstrength=5,phase=5,strength=8) glow(color=#cbb749,strength=1) invert;LEFT:23%;COLOR:black;WORD-BREAK:break-all;FONT-FAMILY:Arial Black;TOP:45%" inset="5pt,5pt,5pt,5pt" print="false">-= I.S.T.O =-</v:Textbox> </a> </body> </html> |