一个开源的Asp.net2.0博客系统
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。
- <html>
- <script language="javascript">
- //将阿拉伯数字翻译成中文的大写数字
- function moneyToCapital(formName,sourceId,targetId)
- {
- var source=document.forms[formName].all[sourceId];
- var target=document.forms[formName].all[targetId];
- var num=source.value;
- if(!/^\d*(\.\d*)?$/.test(num)) throw(new Error(-1, "Number is wrong!"));
- var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
- var BB = new Array("","拾","佰","仟","?","?","圆","");
- var CC = new Array("角", "分", "厘");
- var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";
- for(var i=a[0].length-1; i>=0; i--) //author: meizz
- {
- switch(k)
- {
- case 0 : re = BB[7] + re; break;
- case 4 : if(!new RegExp("0{4}\\d{"+ (a[0].length-i-1) +"}{Article.Explain}quot;).test(a[0]))
- re = BB[4] + re; break;
- case 8 : re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
- }
- if(k%4 == 2 && a[0].charAt(i)=="0" && a[0].charAt(i+2) != "0") re = AA[0] + re;
- if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k%4] + re; k++;
- }
- if(a.length>1) //加上小数部分(如果有小数部分)
- {
- re += BB[6];
- for(var i=0; i<a[1].length; i++)
- {
- re += AA[a[1].charAt(i)] + CC[i];
- if(i==2) break;
- }
- }
- // return re;
- target.value= re ;
- }
- </script>
- <form name="form1" action="" method="post">
- <input type="text" name="a" id="a" onblur="moneyToCapital('form1','a','b')" onkeyup="moneyToCapital('form1','a','b')">
- <input type="text" name="b" id="b" value="">
- </form>
- </html>
1 2 批处理的变量延时 3 4 %% rem 不支持变量延迟,!!支持变量延迟 5 6 rem cmd默认不支持变量延迟。 7 SETLOCAL ENABLEDELAYEDEXPANSION rem启用变量延迟。 8 9 %TheNum% rem 在for循环中不能更新变量,保持运行for语句前的值。 10 !TheNum! rem 能更新变量。 11 12 获取批处理所在的目录 13 ECHO "%~dp0" 14 15 16 整除、循环变量 17 @echo off 18 @setlocal enabledelayedexpansion 19 set/a n = 1 20 for /f "delims=" %%i in ('dir /a-d /b "C:\test\*.*"') do ( 21 set/a i+=1 22 set/a nCount=!i!%%3 23 if !nCount! equ 0 set/a n+=1 24 if not exist !n! md !n! 25 copy "%%i" !n! 26 ) 27 pause 28
在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。
一、CSharpCodeProvider
提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用VBCodeProvider。
CreateCompiler():获取编译器的实例。
二、ICodeCompiler
定义用于调用源代码编译的接口或使用指定编译器的CodeDOM树。每种编译方法都接受指示编译器的CompilerParameters对象,并返回指示编译结果的CompilerResults对象。
CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的编译器,从包含源代码的字符串设置编译程序集。
三、CompilerParameters
表示用于调用编译器的参数。
ReferencedAssemblies:获取当前项目所引用的程序集。Add方法为程序集添加引用。
GenerateExecutable:获取或设置一个值,该值指示是否生成可执行文件。若此属性为false,则生成DLL,默认是false。
GenerateInMemory:获取或设置一个值,该值指示是否在内存中生成输出。
四、CompilerResults
表示从编译器返回的编译结果。
CompiledAssembly:获取或设置以编译的程序集,Assembly类型。
五、Assembly
程序集。
大致了解了以上知识之后,就可以使用C#动态的编译并执行代码了,一下是一段示例程序:
如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。
原因
Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件。不执行 Response.End 后面的代码行。
此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法均在内部调用 Response.End。
解决方案