imtoken官网下载地址|asp探针

作者: imtoken官网下载地址
2024-03-07 17:07:14

ASP探针V1.93-阿江http://www.ajiang.net

ASP探针V1.93-阿江http://www.ajiang.net

阿江ASP 探针 V 1.93 - 20060602

主菜单

快速查看: 精简模式 | 典型模式 | 完整模式

功能直达: 概况

| 组件

| 环境

| 磁盘

| 运算速度

| 带宽检测

| 安全状况

是否支持ASP

出现以下情况即表示您的空间不支持ASP:

1、访问本文件时提示下载。

2、访问本文件时看到类似“<%@ Language="VBScript" %>”的文字。

服务器概况

服务器地址名称 ajiang.net(IP:42.236.75.20) 端口:80

服务器时间2024-3-7 17:06:28

IIS版本Microsoft-IIS/6.0

脚本超时时间90 秒

本文件路径D:\wwwroot\ajiang_net\web\aspcheck.asp

服务器脚本引擎VBScript/5.8.23707 , JScript/5.8.23676

服务器操作系统Windows_NT

全局和会话变量Application 变量 5 个[列表],

Session 变量 0 个

ServerVariables48 个 [Request.ServerVariables 列表]

服务器CPU通道数8 个

服务器CPU详情x86 Family 6 Model 45 Stepping 6, GenuineIntel

全部服务器环境14 个 [WSshell.Environment 列表]

ASP组件支持情况

■ 检查组件是否被支持

在下面的文本框中输入您要检测的组件的 ProgId 或 ClassId

■ 操作系统自带的组件

组件名称及简介支持/版本

MSWC.AdRotator √

MSWC.BrowserType √ 0.0

MSWC.NextLink √ "MSWC 内容链接

MSWC.Tools ×

MSWC.Status ×

MSWC.Counters ×

IISSample.ContentRotator ×

IISSample.PageCounter ×

MSWC.PermissionChecker ×

Microsoft.XMLHTTP (Http 组件, 常在采集系统中用到)√

WScript.Shell (Shell 组件, 可能涉及安全问题)√

Scripting.FileSystemObject (FSO 文件系统管理、文本文件读写)√

Adodb.Connection (ADO 数据对象)√ 2.8

Adodb.Stream (ADO 数据流对象, 常见被用在无组件上传程序中)√

■ 常见文件上传和管理组件

组件名称及简介支持/版本

SoftArtisans.FileUp (SA-FileUp 文件上传)×

SoftArtisans.FileManager (SoftArtisans 文件管理)×

Ironsoft.UpLoad (国产免费, 上传组件)×

LyfUpload.UploadFile (刘云峰的文件上传组件)×

Persits.Upload.1 (ASPUpload 文件上传)×

w3.upload (Dimac 文件上传)×

■ 常见邮件处理组件

组件名称及简介支持/版本

JMail.SmtpMail (Dimac JMail 邮件收发) 中文手册下载√ 4.4

CDONTS.NewMail (CDONTS)×

CDO.Message (CDOSYS)√

Persits.MailSender (ASPemail 发信)×

SMTPsvg.Mailer (ASPmail 发信)×

DkQmail.Qmail (dkQmail 发信)×

SmtpMail.SmtpMail.1 (SmtpMail 发信)×

■ 其它常见组件

组件名称及简介支持/版本

SoftArtisans.ImageGen (SA 的图像读写组件)×

W3Image.Image (Dimac 的图像读写组件)×

Persits.Jpeg (ASPJpeg)×

XY.Graphics (国产免费, 图像/图表处理)×

Ironsoft.DrawPic (国产免费, 图像/图形处理)×

Ironsoft.FlashCapture (国产免费, 多功能 FLASH 截图)×

dyy.zipsvr (国产免费, 呆呆文件压缩解压组件)×

hin2.com_iis (国产免费, 呆呆IIS管理组件)×

Socket.TCP (Dimac 公司的 Socket 组件)×

[查看上述组件的详细介绍和下载地址]

磁盘和文件夹

■ 服务器磁盘信息

盘符和磁盘类型

就绪

卷标

文件系统

可用空间

总空间

可移动磁盘 A:

本地硬盘 C:

NTFS

2.566 GB

9.989 GB

本地硬盘 D:

NTFS

59.262 GB

69.985 GB

CD-ROM K:

×

“×”表示磁盘没有就绪或者当前IIS站点没有对该磁盘的操作权限。

■ 当前文件夹信息

文件夹: D:\wwwroot\ajiang_net\web

已用空间

可用空间

文件夹数

文件数

创建时间

148.806 MB

59.262 GB

22

34

2016-3-14 17:17:57

主菜单

快速查看: 精简模式 | 典型模式 | 完整模式

功能直达: 概况

| 组件

| 环境

| 磁盘

| 运算速度

| 带宽检测

| 安全状况

阿江守候 (www.ajiang.net) 版权所有 © 2001-2005

阿江守候

| 阿江统计

| 我要啦免费统计

| 阿江探针

| 下载最新版

阿江 ASP 探针 - 阿江守候

阿江 ASP 探针 - 阿江守候

阿江守候首页

| 产品首页 | 讨论区

|

首页 阿江产品 阿江文集 网友文集 我的BLOG 站长其人 留言本

阿江ASP探针  V 1.93

- 主要功能

服务器概况、组件支持情况、内存变量、环境参数检测

连接速度测试、磁盘信息和速度测试、脚本运算能力测试

服务器安全评价

- 相关资料

我的Windows服务器安全设置供大家参考

常见组件的技术资料及下载

部分空间商服务器的磁盘和运算能力实测数据集

- 演示、下载、版权声明

完整版演示 完整版下载

瑞星用户版演示 瑞星用户版下载

- 更新日志

2009-7-4

删除部分失效的对照服务器链接。

2006-6-2  V 1.93

带宽检测改为采用客户端脚本获取时长,防止WIN2003缓存导致测速错误。

当 Application 变量中包含对象或数组时,显示为“对象”或“数组”,以前版本将出错。

因为瑞星会将安全检测部分误判为木马病毒,故另外制作了一个瑞星用户版(去掉了安全检测部分)。

当不支持WSH组件时,CPU数和操作系统将显示为“未知”,以前版本为空白。

2005-5-24  V 1.92

修正了1.9中对不安全组件的描述中不准确的部分

增加了指向《阿江的服务器安全设置》的连接

为XML组件标记了版本号

2005-5-17  V 1.9

以积木式的设计思路重新编写代码,功能增加但是结构并不臃肿

改用三维数组保存待检测组件,增加了一些常见的组件,包括国产的Ironsoft和呆呆系列免费组件

增加组件介绍及下载的连接

增加罗列 Application 变量、Session 变量、环境参数、ServerVariables 变量的功能

增加服务器和当前客户端的连接速度测试功能

参考7i24相关代码增加了不安全组件检测功能和系统用户、进程罗列功能

2004-6-6 V1.8

解决了Windows 2003服务器的CPU个数无法检测的问题

增加了CPU详情的测试项目

2004-3-28 V1.72

解决在Windows 2003服务器上运行时显示过慢的问题(启用了缓存)

2003-11-1  V 1.7

增加磁盘分区及相关信息罗列功能

增加获取当前文件夹信息功能

增加对磁盘读写速度进行测试的功能

2003-6-10 V1.6

增加对浮点运算能力的测试

修改了对LYF上传组件检测不准确的错误并去掉了部分垃圾代码

将下载连接直接写在了探针上

2002-10-13 V1.51

使用timer代替now,使服务器脚本解释执行时间精确到0.1毫秒

对服务器脚本解释执行时间检测时的计算次数由 500 万次减少到 50 万次,检测速度直接自动进行

使用新的检测机制编写检测代码,结果更准确

(原来通过判断是否出错来检测,现在通过错误号来检测)

使用一个子程序同时完成支持情况和版本的检测(原来使用两个自定义函数)

用数组保存要检测的组件的相关信息,使代码更有条理

增加了对部分图像读写组件的自动检测。

使用CSS重做了页面

2002-4-2 V1.4

增加了对大量发邮件组件的自动检测

2001-12-11  V 1.3

可以判断部分组件的版本。

测试服务器运算500万次1+1运算的时间精确度改为:没有小数位,因为程序中使用的测试方法本身就只能精确到秒。

用POST方法传递“是否测试”参数,避免某些外国空间不支持 ?test=yes 参数而造成的错误。

2001-10-20  V 1.2

增加服务器脚本执行能力测试功能

2001-10-10  V 1.1

增加了对服务器脚本类型和版本号的检测

增加了对服务器CPU个数和操作系统的检测

改为在落伍者论坛和寒冰轩论坛同时发布

2001-10-3  V 1.0

应当时免费空间盛行的论坛环境编写,在寒冰轩论坛发布

具备探针的雏形,具备检测服务器基本信息和很常见的组件的支持情况的能力

 

阿江守候 (www.ajiang.net) 版权所有 © 2001-2005

首页 | 阿江统计 | 免费统计

| 阿江产品 | 阿江文集 | 阿江BLOG | 留言本

豫ICP备05004678号

安全篇 ━━ ITlearner ASP探针 V1.2_it学习者asp探针(itlearner aspcheck)-CSDN博客

>

安全篇 ━━ ITlearner ASP探针 V1.2_it学习者asp探针(itlearner aspcheck)-CSDN博客

安全篇 ━━ ITlearner ASP探针 V1.2

最新推荐文章于 2021-09-14 17:37:58 发布

暂时先用这个名字

最新推荐文章于 2021-09-14 17:37:58 发布

阅读量335

收藏

点赞数

分类专栏:

安全

文章标签:

asp

安全

安全漏洞

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/snans/article/details/111618582

版权

安全

专栏收录该内容

17 篇文章

2 订阅

订阅专栏

最近在整理老的代码,漏洞一大堆;发现了有良心的黑客,上传了不干净的东西,但并没有操作什么。-

警告提示如下:

在您的系统磁盘上发现了一个可疑文件,它可能代表了是黑客成功入侵网站后种植的,建议您先确认文件合法性并处理。总体上,Webshell检测是根据文件行为威胁程度进行打分的,这个文件具备了一定的危险功能,本身具有一定的危险特征,但并不完全保证一定是一个网站后门,也可能是一些包含可以代码的正常网站文件,如果管理员自己部署放置的,可以在前台选择忽略或者标记为误报按钮。同时,如果被告警的文件是一个.log网站日志文件,常常是因为网站将http日志直接明文保存在文件中,这样存在一定的安全风险。建议将http日志的保存路径放置到非web路径下。

代码如下:

<%@ Language="VBScript" CODEPAGE="936"%>

<% Option Explicit %>

<%

Response.Buffer = True

'####################################

'# #

'# ITlearner ASP探针 V1.2 #

'# #

'# http://www.itlearner.com #

'# #

'# 转载本程序时请保留这些信息 #

'# #

'####################################

Dim startime

startime=timer()

Dim hx

Set hx = New Cls_AspCheck

class Cls_AspCheck

Public FileName,WebName,WebUrl,SysName,SysNameE,SysVersion

'检查组件是否被支持

Public Function IsObjInstalled(strClassString)

On Error Resume Next

Dim xTestObj

Set xTestObj = Server.CreateObject(strClassString)

If Err Then

IsObjInstalled = False

else

IsObjInstalled = True

end if

Set xTestObj = Nothing

End Function

'检查组件版本

Public Function getver(Classstr)

On Error Resume Next

Dim xTestObj

Set xTestObj = Server.CreateObject(Classstr)

If Err Then

getver=""

else

getver=xTestObj.version

end if

Set xTestObj = Nothing

End Function

Public Function GetObjInfo(startnum,endnum)

dim i,Outstr

for i=startnum to endnum

Outstr = Outstr & " " & theTestObj(i,0) & ""

Outstr = Outstr & " "&theTestObj(i,1)&""

Outstr = Outstr & ""

If Not IsObjInstalled(theTestObj(i,0)) Then

Outstr = Outstr & " ×"

Else

Outstr = Outstr & "  " & getver(theTestObj(i,0)) & ""

End If

Outstr = Outstr & "" & vbCrLf

next

Response.Write(Outstr)

End Function

Public Function cdrivetype(tnum)

Select Case tnum

Case 0: cdrivetype = "未知"

Case 1: cdrivetype = "可移动磁盘"

Case 2: cdrivetype = "本地硬盘"

Case 3: cdrivetype = "网络磁盘"

Case 4: cdrivetype = "CD-ROM"

Case 5: cdrivetype = "RAM 磁盘"

End Select

end function

Private Sub Class_Initialize()

WebName="IT学习者"

WebUrl="http://www.itlearner.com"

SysName="ASP探针"

SysNameE="AspCheck"

SysVersion="V1.2"

FileName=Request.ServerVariables("SCRIPT_NAME")

End Sub

Public Function dtype(num)

Select Case num

Case 0: dtype = "未知"

Case 1: dtype = "可移动磁盘"

Case 2: dtype = "本地硬盘"

Case 3: dtype = "网络磁盘"

Case 4: dtype = "CD-ROM"

Case 5: dtype = "RAM 磁盘"

End Select

End Function

Public Function formatdsize(dsize)

if dsize>=1073741824 then

formatdsize=Formatnumber(dsize/1073741824,2) & " GB"

elseif dsize>=1048576 then

formatdsize=Formatnumber(dsize/1048576,2) & " MB"

elseif dsize>=1024 then

formatdsize=Formatnumber(dsize/1024,2) & " KB"

else

formatdsize=dsize & "B"

end if

End Function

Public Function formatvariables(str)

on error resume next

str = cstr(server.htmlencode(str))

formatvariables=replace(str,chr(10),"
")

End Function

Public Sub ShowFooter()

dim Endtime,Runtime,OutStr

Endtime=timer()

OutStr = "

"

OutStr = OutStr & "

此程序是ITlearnerAjiangCOCOON的ASP探针的代码为原型,结合部分自已原创的代码精心编写而成。

"

OutStr = OutStr & "

欢迎访问★IT学习者★下载最新版程序
" & vbcrlf

Runtime=FormatNumber((endtime-startime)*1000,2)

if Runtime>0 then

if Runtime>1000 then

OutStr = OutStr & "页面执行时间:约"& FormatNumber(runtime/1000,2) & "秒"

else

OutStr = OutStr & "页面执行时间:约"& Runtime & "毫秒"

end if

end if

OutStr = OutStr & "  "

OutStr = OutStr & "ITlearner AspCheck " & SysVersion & ""

OutStr = OutStr & "

"

Response.Write(OutStr)

End Sub

End class

Dim theTestObj(25,1)

theTestObj(0,0) = "MSWC.AdRotator"

theTestObj(1,0) = "MSWC.BrowserType"

theTestObj(2,0) = "MSWC.NextLink"

theTestObj(3,0) = "MSWC.Tools"

theTestObj(4,0) = "MSWC.Status"

theTestObj(5,0) = "MSWC.Counters"

theTestObj(6,0) = "MSWC.PermissionChecker"

theTestObj(7,0) = "WScript.Shell"

theTestObj(8,0) = "Microsoft.XMLHTTP"

theTestObj(9,0) = "Scripting.FileSystemObject"

theTestObj(9,1) = "(FSO 文本文件读写)"

theTestObj(10,0) = "ADODB.Connection"

theTestObj(10,1) = "(ADO 数据对象)"

theTestObj(11,0) = "SoftArtisans.FileUp"

theTestObj(11,1) = "(SA-FileUp 文件上传)"

theTestObj(12,0) = "SoftArtisans.FileManager"

theTestObj(12,1) = "(SoftArtisans 文件管理)"

theTestObj(13,0) = "LyfUpload.UploadFile"

theTestObj(13,1) = "(刘云峰的文件上传组件)"

theTestObj(14,0) = "Persits.Upload"

theTestObj(14,1) = "(ASPUpload 文件上传)"

theTestObj(15,0) = "w3.upload"

theTestObj(15,1) = "(Dimac 文件上传)"

theTestObj(16,0) = "JMail.SmtpMail"

theTestObj(16,1) = "(Dimac JMail 邮件收发)"

theTestObj(17,0) = "CDONTS.NewMail"

theTestObj(17,1) = "(虚拟 SMTP 发信)"

theTestObj(18,0) = "Persits.MailSender"

theTestObj(18,1) = "(ASPemail 发信)"

theTestObj(19,0) = "SMTPsvg.Mailer"

theTestObj(19,1) = "(ASPmail 发信)"

theTestObj(20,0) = "DkQmail.Qmail"

theTestObj(20,1) = "(dkQmail 发信)"

theTestObj(21,0) = "Geocel.Mailer"

theTestObj(21,1) = "(Geocel 发信)"

theTestObj(22,0) = "IISmail.Iismail.1"

theTestObj(22,1) = "(IISmail 发信)"

theTestObj(23,0) = "SmtpMail.SmtpMail.1"

theTestObj(23,1) = "(SmtpMail 发信)"

theTestObj(24,0) = "SoftArtisans.ImageGen"

theTestObj(24,1) = "(SA 的图像读写组件)"

theTestObj(25,0) = "W3Image.Image"

theTestObj(25,1) = "(Dimac 的图像读写组件)"

%>

IT学习者ASP探针(ITlearner AspCheck) <%=hx.SysVersion%>-www.ITlearner.com

ASP

探针 - <%=hx.SysVersion%>(ITlearner)


<%

dim action

action=request("action")

if action="testzujian" then

call ObjTest2

end if

Call menu

Call SystemTest

Call ObjTest

Call CalculateTest

Call DriveTest

Call SpeedTest

hx.ShowFooter

Set hx= nothing

%>

<%Sub menu%>

选项:服务器有关参数 | 服务器组件情况 | 服务器运算能力

| 服务器磁盘信息 | 服务器连接速度

<%End Sub%>

<%Sub smenu(i)%>

5 name=txt<%=i%>>x

<%End Sub%>

<%Sub SystemTest

on error resume next

%>

服务器有关参数

<%Call smenu(0)%>


<%

End Sub

Sub showvariable(action)

%>

<%

if err then

outstr = "

"

err.clear

else

dim w

if action="showwsh" then

for each Item in xTestObj

w=split(Item,"=")

outstr = outstr & "

"

outstr = outstr & "

"

outstr = outstr & "

"

outstr = outstr & "

"

next

else

dim i

for each Item in xTestObj

outstr = outstr & "

"

outstr = outstr & "

"

outstr = outstr & "

"

outstr = outstr & "

"

next

end if

end if

Response.Write(outstr)

set xTestObj=nothing

%>

  

<%

on error resume next

dim Item,xTestObj,outstr

if action="showapp" then

Response.Write("4 遍历Application变量")

set xTestObj=Application.Contents

elseif action="showsession" then

Response.Write("4 遍历Session变量")

set xTestObj=Session.Contents

elseif action="showvariables" then

Response.Write("4 遍历服务器参数")

set xTestObj=Request.ServerVariables

elseif action="showwsh" then

Response.Write("4 遍历环境变量")

dim WshShell

Set WshShell = server.CreateObject("WScript.Shell")

set xTestObj=WshShell.Environment

end if

Response.Write "(关闭)"

%>

变量名
没有符合条件的变量
" & w(0) & "" & w(1) & "
" & Item & ""

if IsArray(xTestObj(Item)) then

for i=0 to ubound(xTestObj(Item))-1

outstr = outstr & hx.formatvariables(xTestObj(Item)(i)) & "
"

next

else

outstr = outstr & hx.formatvariables(xTestObj(Item))

end if

outstr = outstr & "

<%End Sub%>

<%Sub ObjTest%>

服务器组件情况

<%Call smenu(1)%>


<%

End Sub

Sub ObjTest2

Dim strClass

strClass = Trim(Request.Form("classname"))

If strClass <> "" then

Response.Write "
您指定的组件的检查结果:"

If Not hx.IsObjInstalled(strClass) then

Response.Write "
很遗憾,该服务器不支持" & strclass & "组件!"

Else

Response.Write "
"

Response.Write " 恭喜!该服务器支持" & strclass & "组件。"

If hx.getver(strclass)<>"" then

Response.Write " 该组件版本是:" & hx.getver(strclass)

End if

Response.Write ""

End If

Response.Write "
"

end if

Response.Write "

返回

"

Response.End

End Sub

Sub CalculateTest

%>

服务器运算能力

<%Call smenu(2)%>


<%

End Sub

Sub DriveTest

On Error Resume Next

Dim fo,d,xTestObj

set fo=Server.Createobject("Scripting.FileSystemObject")

set xTestObj=fo.Drives

%>

服务器磁盘信息

<%Call smenu(4)%>


<%

End Sub

Sub SpeedTest

Response.Flush()

%>

<% if action="SpeedTest" then%>

网速测试中,请稍候...

<% end if%>

服务器连接速度

<%smenu(3)%>

<%End Sub%>

优惠劵

暂时先用这个名字

关注

关注

0

点赞

0

收藏

觉得还不错?

一键收藏

知道了

0

评论

安全篇 ━━ ITlearner ASP探针 V1.2

最近在整理老的代码,漏洞一大堆;发现了有良心的黑客,上传了不干净的东西,但并没有操作什么。-警告提示如下:在您的系统磁盘上发现了一个可疑文件,它可能代表了是黑客成功入侵网站后种植的,建议您先确认文件合法性并处理。总体上,Webshell检测是根据文件行为威胁程度进行打分的,这个文件具备了一定的危险功能,本身具有一定的危险特征,但并不完全保证一定是一个网站后门,也可能是一些包含可以代码的正常网站文件,如果管理员自己部署放置的,可以在前台选择忽略或者标记为误报按钮。同时,如果被告警的文件是一个.log网站

复制链接

扫一扫

专栏目录

ASP探针

04-13

ASP探针,查看服务器配置情况

ITlearner ASP探针_v1.4.zip

12-28

ITlearner ASP探针_v1.4.zip!@!!!!!!!!!

参与评论

您还未登录,请先

登录

后发表或查看评论

asp探针,用来检测Web服务器相关特性

yanick技术博客

04-07

3381

下面代码是Asp探针aspCheck.asp%@ Language="VBScript" CODEPAGE="936"%>% Option Explicit %>% Response.Buffer = TrueDim startime     startime=timer()Dim hxSet hx = New Cls_AspCheckclass Cls_AspCheckPublic 

A002-185-1203

GONGZIXUY的博客

01-04

2514

目录

一、查词文档 3

1、第一次查词 3

1.1需求基线(Requirements baseline) 3

1.2 概念聚类(Conceptual clustering) 7

1.3图形元素(Graphic elements) 10

1.4状态机(State machine) 13

1.5章节回顾(Chapter Review) 15

1.6对象流(Object Flow) 31

1.7需求工程师(Requirements Engineer) 33

1.8实体关系模型(Entity-relationshi

ASP.NET验证控件学习总结与正则表达式学习入门

热门推荐

阳光岛主

12-08

1万+

【ASP.NET】基础补习之验证控件 在做Web应用程序的时候,因为用户有可能输入各式各样的信息,经常需要大量的数据验证,如果交给服务器去验证的话,无疑会增加服务器的压力,而且也容易造成程序的异常。甚至导致网站出现一些安全问题。因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行。ASP.NET提供了六种验证控件,可

asp服务器探针

flynetcn的专栏

01-05

4067

方法一://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#####################################                               

asp探针

Sunny

01-26

1404

<%不使用输出缓冲区,直接将运行结果显示在客户端Response.Buffer = False声明待检测数组Dim ObjTotest(26,4)ObjTotest(0,0) = "MSWC.AdRotator"ObjTotest(1,0) = "MSWC.BrowserType"ObjTotest(2,0) = "MSWC.NextLink"ObjTo

ASP常见漏洞大全

机器的自我探索之旅

01-07

1万+

一、SQL注入漏洞

漏洞简介:

程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入漏洞的几种类型:

1、数字型注入漏洞

例如:http://www.tes

网络安全-webshell详解(原理、攻击、检测与防御)

关注网络安全、云原生安全

09-14

5万+

简介

原理

攻击

WebShell管理工具

Cknife中国菜刀

antSword中国蚁剑

冰蝎动态二进制加密网站管理客户端

weevely3Weaponized web shell

Altmanthe cross platform webshell tool in .NET

Webshell SniperManage your website via terminal

quasibotcomplex webshell manager, quasi-http botne...

ASP 空间探针(JScript 写的)

10-13

ASP 空间探针(JScript 写的),作者:cocoon sTudio. 2002/12/12

asp环境探针操作简单

03-04

asp环境探针,操作简单,一目了然,上传即可使用。主文件:aspcheck.asp

IT学习者ASP探针 v1.3.zip

07-05

是ITlearner以Ajiang和COCOON的ASP探针的代码为原型,结合部分自已原创的代码精心编写,服务器有关参数,服务器组件情况,服务器运算能力,服务器磁盘信息,服务器连接速度

v1.3更新:按Web标准重构,兼容在FireFox下运行,并通过了W3C的校验

iis配置环境监测工具asp探针

11-06

在IIS网络环境中,加载asp探针,测试adp网页文件能否正常使用,以及详细环境配置。

IT学习者ASP探针 v1.3

03-26

是ITlearner以Ajiang和COCOON的ASP探针的代码为原型,结合部分自已原创的代码精心编写,服务器有关参数,服务器组件情况,服务器运算能力,服务器磁盘信息,服务器连接速度  v1.3更新:按Web标准重构,兼容在Fire...

asp探针 asp服务器功能探测

04-28

asp探针 asp服务器功能探测 探测asp服务器所开放的服务

乘风asp.net探针 v1.3

10-21

可探测试以下各类信息1.服务器基本信息2.常用系统组件信息3.常用邮件组件、图像组件、文件上传组件信息4.自定义组件信息5.浏览者客户端信息6.空间是否有写入权限,这点很重要,没有写入权限的asp.net空间大部分用不了7.加入判断服务器IP是使用公网iP还是内网IP的功能,现在很多服务器上只绑定了内网IP8.判断服务器是否是否了CDN或云主机的功能9.判断本地时间和服务器比较是否过大,过大可能会引起SSL证书提示失效或cookie过期

乘风asp.net探针 V1.3版 更新内容:1.加入判断服务器IP是使用公网iP还是内网IP的功能,现在很多服务器上只绑定了内网IP2.加入判断服务器是否是否了CDN或云主机的功能3.加入浏览者UserAgent信息显示的功能4.加入了浏览者本地时间显示的功能,如果和服务器相差大于1小时会提示,相差可能会引起SSL证书提示失效或cookie过期

asp.net探针,aspx探针,asp探针

06-29

看到csdn上的那个asp探针竟要了10积分,所以上次一个供大家免费用,呵呵

ASP探针 v1.3.rar

01-15

'####################################

'# #

'# ITlearner ASP探针 V1.3 #

'# #

'# http://www.itlearner.com #

'# #

'# 转载本程序时请保留这些信息 #

'# #

'####################################

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

暂时先用这个名字

CSDN认证博客专家

CSDN认证企业博客

码龄14年

暂无认证

194

原创

561

周排名

5613

总排名

68万+

访问

等级

3845

积分

3万+

粉丝

728

获赞

282

评论

2480

收藏

私信

关注

热门文章

windows使用小技巧 ━━ Windows 10 HEVC扩展要收费怎么办?教你怎么免费下载HEVC扩展

84023

AI绘图提示词/咒语/词缀/关键词使用指南(Stable Diffusion Prompt 设计师操作手册)

40960

Stable Diffusion 个人推荐的各种模型及设置参数、扩展应用等合集(不断更新中)

34184

Windows安装Stable Diffusion WebUI及问题解决记录

24456

windows自带磁盘修复命令chkdsk的使用方法

23916

分类专栏

制图

28篇

AI

30篇

工具

15篇

技巧

17篇

服务器

21篇

数据库

16篇

PHP

33篇

游戏

3篇

前端

47篇

日记

2篇

言习

4篇

审核失败

2篇

安全

17篇

Unreal Engine

6篇

通会

4篇

Golang

63篇

医道

3篇

App

20篇

最新评论

Excel快速地拆分合并的单元格并填充数据

Viens_de_feng:

真的牛批 可以实操

【私人系列】日常PHP遇到的各种稀奇古怪的问题

CSDN-Ada助手:

什么是PHP语言?

Stable Diffusion中ControlNet和OpenPose的安装教程

暂时先用这个名字:

ControlNet用的都一样,顶多版本有所差异

Stable Diffusion中ControlNet和OpenPose的安装教程

WYP862:

请问那个openpose的模型和其它openpose模型是同一个吗

利用阿里云物联网平台(IoT)实现WEB数据可视化

暂时先用这个名字:

域名100左右,不同域名价格不同;

虚拟空间便宜的几百,如果不用虚拟空间用服务器,1000左右起步,量大没有上限;

文中所提的展示平台根据配置不同价格不同,我更新了文章第四部分,最低配置每个月762,一年9100多。具体的你自己登录阿里云平台操作即可。

自荐文章

学习Android的第二十四天

基于的高校党建平台(源码+开题)

JAVA选择排序

202

Python那么火,到底可以用来做什么?

Gitlab docker部署

407

最新文章

详细介绍windows自带Hyper-V安装虚拟机(windows11 / ubuntu22 / macos12)

OpenAI Sora出炉,视频鉴赏,详细介绍,小白看过来~~立即尝试Sora,开启您的AI视频创作之旅吧!

不同的AI修改同一篇文章标题

2024年13篇

2023年57篇

2022年39篇

2021年29篇

2020年60篇

2019年18篇

目录

目录

分类专栏

制图

28篇

AI

30篇

工具

15篇

技巧

17篇

服务器

21篇

数据库

16篇

PHP

33篇

游戏

3篇

前端

47篇

日记

2篇

言习

4篇

审核失败

2篇

安全

17篇

Unreal Engine

6篇

通会

4篇

Golang

63篇

医道

3篇

App

20篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

ASP.net 探针 - zwei - 博客园

ASP.net 探针 - zwei - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

zwei1121

博客园

首页

新随笔

联系

订阅

管理

公告

ASP.net 探针

<%@ Page Language="JScript" ContentType="text/html" ResponseEncoding="gb2312" Debug="true" aspcompat="true" %><% Response.Expires = 0; Response.Buffer = true; var tPageStartTime = new Date(); var sTheFile, i, j, x, y; sTheFile = Request.ServerVariables("SCRIPT_NAME"); var sObjName = Request.Form("sObjName")+""; var bShowDetail = false; if(Request.QueryString.ToString().indexOf("ServerDetail")>-1) bShowDetail = true; var arrObj = new Array( Array( "MSWC.AdRotator", "", 1 ), Array( "MSWC.BrowserType", "", 1 ), Array( "MSWC.NextLink", "", 1 ), Array( "MSWC.Tools", "", 1 ), Array( "MSWC.Status", "", 1 ), Array( "MSWC.Counters", "", 1 ), Array( "IISSample.ContentRotator", "", 1 ), Array( "IISSample.PageCounter", "", 1 ), Array( "MSWC.PermissionChecker", "", 1 ), Array( "WScript.Shell", "", 1 ), Array( "Scripting.FileSystemObject", "", 1 ), Array( "ADODB.Connection", "ActiveX Data Object [ADO]", 1 ), Array( "CDONTS.NewMail", "Collaboration Data Object [CDO]", 1 ), Array( "SoftArtisans.FileUp", "SA-FileUp 文件上传", 2 ), Array( "SoftArtisans.FileManager", "SA-FM 文件管理", 2 ), Array( "LyfUpload.UploadFile", "LyfUpload 文件上传", 2 ), Array( "Persits.Upload.1", "ASPUpload 文件上传", 2 ), Array( "w3.upload", "w3 upload 文件上传", 2 ), Array( "iismail.iismail.1", "IISemail", 3 ), Array( "JMail.SMTPMail", "w3 Jmail", 3 ), Array( "Persits.MailSender", "ASPemail", 3 ), Array( "SMTPsvg.Mailer", "ASPmail", 3 ), Array( "dkQmail.Qmail", "dkQmail", 3 ), Array( "SmtpMail.SmtpMail.1", "SMTPmail", 3 ), Array( "Geocel.Mailer", "Geocel", 3), Array( "SoftArtisans.ImageGen", "SA 的图像读写组件", 4), Array( "W3Image.Image", "Dimac 的图像读写组件", 4) ); if(sObjName.length) arrObj[arrObj.length] = Array( sObjName, "", 99 );

%> COCOON ASP.net 探针

COCOON v

 ASP.net 探针

 Server/Client Environment Probe

* 欢迎使用COCOON ASP.net探针,本软件为免费软件,请勿用于商业用途。
  你可以从作者的网站(www.ccopus.com)或其他支持者的网站得到本软件。

Loading...
※ Server Side   ※ Client Side
S

 8 服务器端基本信息 <% if(!bShowDetail){ %> <% } %> :::... 服务器当前时间: <%=DateTime.Now%>  
 项目  
 域名 / IP
 Domain Name
 <%=Request.ServerVariables("SERVER_NAME")%>  / <%=Request.ServerVariables("LOCAL_ADDR")%> [ 端口:<%=Request.ServerVariables("SERVER_PORT")%> ]
 服务器名
 Machine Name
 <%=Environment.MachineName%>  服务器网络域名
 Domain Name
 <%=Environment.UserDomainName.ToString()%>
 操作系统
 Operating System
 <%=Environment.OSVersion.ToString()%> 
 系统文件夹
 System Directory
 <%=Environment.SystemDirectory.ToString()%>  运行时长
 TickCount
 <%=Math.round(Environment.TickCount/600/60)/100%> 小时
 信息服务软件
 Server Software
 <%=Request.ServerVariables("SERVER_SOFTWARE")%> ( .NET RTL 版本: <%=Environment.Version%> )
 当前用户
 Current User
 <%=Environment.UserName%>  当前文件夹
 Current Directory
 <%=Environment.CurrentDirectory.ToString()%>
 完整地址
 URL & Path
  <% var sHostName = Request.ServerVariables("HTTP_HOST") var sPostNo = Request.ServerVariables("SERVER_PORT ") var sUrl = Request.ServerVariables("URL") Response.Write("http://" + sHostName + (sPostNo=='80'?'':sPostNo) + sUrl) %>
  <%=Request.ServerVariables("PATH_TRANSLATED")%>
 相对路径
 Path Info
 <%=Request.ServerVariables("PATH_INFO")%>  物理路径
 Physical Path
 <%=Request.ServerVariables("APPL_PHYSICAL_PATH")%>
 脚本引擎
 ScriptEngine
 JScript / <%=ScriptEngineMajorVersion() +"." + ScriptEngineMinorVersion() +"." + ScriptEngineBuildVersion() + " "%>
 脚本超时
 Script Timeout
 <%=Server.ScriptTimeout%> 秒  当前会话编号
 Session ID
 <%=Session.SessionID%>
 本页命令行
 Command Line
  <%=Environment.CommandLine%>
 服务器变量数
 Application Count
 <%=Application.Contents.Count%>  会话变量数
 Session Count
 <%=Session.Contents.Count%>

 8 服务器组件信息 :::... Coding by Sunrise_Chen. 
<% var iIndex, sObjName, sObjDetail, sObjType, iIndexCount, bShowUnSupport; var sObjVersion,bObjInstalled; iIndex = 0; iIndexCount = -1; bShowUnSupport = false; for(var i=0;;i++){ if(i>=arrObj.length||iIndex!=arrObj[i][2]){ if(iIndexCount==0&&iIndex<99){ Response.Write( '\n'+ '\n'+ '\n' ); } if(i>=arrObj.length) break; iIndex=arrObj[i][2]; iIndexCount=0; switch(iIndex){ case 1: sObjType = "IIS自带组件"; break; case 2: sObjType = "常见的第三方文件上传和管理组件"; break; case 3: sObjType = "常见的第三方文件邮件发送组件"; break; case 4: sObjType = "常见的图像处理组件"; break; default: sObjType = "自定义组件"; break; } Response.Write( '\n'+ '\n'+ '\n' ); } sObjName = arrObj[i][0] sObjDetail = arrObj[i][1]; bObjInstalled = true; sObjVersion = getObjVer(sObjName); if(sObjVersion=="N/A"){ bObjInstalled = false; sObjVersion = ""; } if(bObjInstalled||iIndex==99){ iIndexCount++; Response.Write( '\n'+ '\n'+ '\n' + '\n' + '\n' ); } } %>
 组件名 支持 版本
 ( 服务器暂不支持该类组件 )
 ■ '+sObjType+'
'+ '  ' + sObjName + (sObjDetail?' ( ' + sObjDetail + ' )':'') + '\n' + '' + (bObjInstalled?"√":"×") + '' + sObjVersion + '
 检测其他组件

<% //if(bShowDetail){ %>
 8 服务器端环境变量列表 :::... Coding by Sunrise_Chen. 
<% try{ var WshShell; WshShell = Server.CreateObject("WScript.Shell"); %> <% for(x in WshShell.Environment){ %> <% } %> <% }catch(e){}%> <% for(x in Request.ServerVariables){ %> <% } %>
 项目  
 <%=x.substr(0,x.indexOf("="))%> <%=x.substr(x.indexOf("=")+1)%>
 <%=x%> <%=Request.ServerVariables(x)%>

<% //} %>

<%="

"%>


Copyright(C) Sunrise_Chen @ COCOON sTudio [ www.ccopus.com ] .
本程序由Sunrise_Chen编写,转载时请保留这些信息. <%="
本页面执行所需内存:" + (Math.round(Environment.WorkingSet/1024/1024*100)/100).ToString() + " KB."%> <% var tPageEndTime = new Date(); %> <%="执行时间:约 "+((tPageEndTime-tPageStartTime)/1000)+" 秒"%>

posted on

2013-11-04 11:08 

zwei 

阅读(741) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

Powered by:

博客园

Copyright © 2024 zwei

Powered by .NET 8.0 on Kubernetes

asp探针_百度百科

针_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10asp探针播报讨论上传视频用来探测服务器网站空间速度、性能、安全功能等的ASP程序本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!asp探针是一款用来探测服务器网站空间速度、性能、安全功能等的ASP程序。中文名asp探针定    义一款用来探测服务器网站空间速度、性能、安全功能等的ASP程序目录1程序介绍2主要功能3适用对象4主要用途程序介绍播报编辑据专业人士了解,一些ISP网络服务提供商~使用修改好的asp探针 使到客户误认他的服务器的速度很快,来欺骗客户,得以信任。大家需提防。主要功能播报编辑1、服务器环境探测:服务器操作系统、服务器名称、服务器IP地址、服务器时间、服务器CPU数量及CPU种类、WEB服务及其版本等。2、ASP环境探测:脚本解释引擎及版本、脚本超时时间、Session超时时间、当前站点的物理路径映射、常见组件支持情况及版本检测。3、服务器性能检测:整数运算能力、浮点数运算能力、数据IO能力、连接速度测试等。适用对象播报编辑1、熟悉ASP编程的业余爱好者及专业开发人员。2、机房管理人员系统环境,检测系统是否配置成功。3、对于购买虚拟主机的用户,用于测试服务器性能。主要用途播报编辑1、服务器概况、组件支持情况、内存变量、环境参数检测2、连接速度测试、磁盘信息和速度测试、脚本运算能力测试3、服务器安全评价新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

asp探针,用来检测Web服务器相关特性-CSDN博客

>

asp探针,用来检测Web服务器相关特性-CSDN博客

asp探针,用来检测Web服务器相关特性

最新推荐文章于 2021-08-05 17:03:22 发布

yanick

最新推荐文章于 2021-08-05 17:03:22 发布

阅读量3.3k

收藏

点赞数

分类专栏:

Asp

文章标签:

asp

web服务

服务器

action

div

function

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ycyangcai/article/details/1555938

版权

Asp

专栏收录该内容

14 篇文章

0 订阅

订阅专栏

下面代码是Asp探针

aspCheck.asp

<

%@ Language

=

"

VBScript

"

 CODEPAGE

=

"

936

"

%

>

<

Option

 

Explicit

 %

>

<

% Response.Buffer 

=

 

True

Dim

 startime     startime

=

timer

()

Dim

 hx

Set

 hx 

=

 

New

 Cls_AspCheckclass Cls_AspCheck

Public

 FileName,WebName,WebUrl,SysName,SysNameE,SysVersion    

'

检查组件是否被支持

    

Public

 

Function

 IsObjInstalled(strClassString)        

On

 

Error

 

Resume

 

Next

        

Dim

 xTestObj        

Set

 xTestObj 

=

 Server.CreateObject(strClassString)        

If

 Err 

Then

            IsObjInstalled 

=

 

False

        

else

                IsObjInstalled 

=

 

True

        

end

 

if

        

Set

 xTestObj 

=

 

Nothing

    

End Function

    

'

检查组件版本

    

Public

 

Function

 getver(Classstr)        

On

 

Error

 

Resume

 

Next

        

Dim

 xTestObj        

Set

 xTestObj 

=

 Server.CreateObject(Classstr)        

If

 Err 

Then

            getver

=

""

        

else

                 getver

=

xTestObj.version        

end

 

if

        

Set

 xTestObj 

=

 

Nothing

    

End Function

    

Public

 

Function

 GetObjInfo(startnum,endnum)        

dim

 i,Outstr        

for

 i

=

startnum 

to

 endnum              Outstr 

=

 Outstr 

&

 

"

"

 

&

 theTestObj(i,

0

&

 

""

              

if

 theTestObj(i,

1

<>

 

""

 

then

 Outstr 

=

 Outstr 

&

 

"

"

&

theTestObj(i,

1

)

&

"

"

              Outstr 

=

 Outstr 

&

 

"

"

            

If

 

Not

 IsObjInstalled(theTestObj(i,

0

)) 

Then

               Outstr 

=

 Outstr 

&

 

"

×

"

            

Else

              Outstr 

=

 Outstr 

&

 

"

 

"

 

&

 getver(theTestObj(i,

0

)) 

&

 

"

"

            

End

 

If

              Outstr 

=

 Outstr 

&

 

"

"

 

&

 vbCrLf        

next

        Response.Write(Outstr)    

End Function

    

Private

 

Sub

 Class_Initialize()        WebName

=

"

IT学习者

"

        WebUrl

=

"

http://www.itlearner.com

"

        SysName

=

"

ASP探针

"

                SysNameE

=

"

AspCheck

"

        SysVersion

=

"

V1.3

"

        FileName

=

Request.ServerVariables(

"

SCRIPT_NAME

"

)        

if

 

InStr

(FileName,

"

/

"

then

 FileName 

=

 

right

(FileName,

len

(FileName)

-

InStrRev

(FileName,

"

/

"

))    

End Sub

    

Public

 

Function

 dtype(num)        

Select

 

Case

 num            

Case

 

0

: dtype 

=

 

"

未知

"

            

Case

 

1

: dtype 

=

 

"

可移动磁盘

"

            

Case

 

2

: dtype 

=

 

"

本地硬盘

"

            

Case

 

3

: dtype 

=

 

"

网络磁盘

"

            

Case

 

4

: dtype 

=

 

"

CD-ROM

"

            

Case

 

5

: dtype 

=

 

"

RAM 磁盘

"

        

End

 

Select

    

End Function

    

Public

 

Function

 formatdsize(dsize)        

if

 dsize

>=

1073741824

 

then

            formatdsize

=

Formatnumber

(dsize

/

1073741824

,

2

&

 

"

 GB

"

        

elseif

 dsize

>=

1048576

 

then

            formatdsize

=

Formatnumber

(dsize

/

1048576

,

2

&

 

"

 MB

"

        

elseif

 dsize

>=

1024

 

then

            formatdsize

=

Formatnumber

(dsize

/

1024

,

2

&

 

"

 KB

"

        

else

            formatdsize

=

dsize 

&

 

"

B

"

        

end

 

if

    

End Function

    

Public

 

Function

 formatvariables(str)        

on

 

error

 

resume

 

next

        str 

=

 

cstr

(server.htmlencode(str))        formatvariables

=

replace

(str,

chr

(

10

),

"


"

)    

End Function

    

Public

 

Sub

 ShowFooter()        

dim

 Endtime,Runtime,OutStr        Endtime

=

timer

()        OutStr 

=

 

"

"

        OutStr 

=

 OutStr 

&

 

"

此程序是ITlearner以Ajiang和COCOON的ASP探针的代码为原型,结合部分自已原创的代码精心编写而成。

"

        OutStr 

=

 OutStr 

&

 

"

欢迎访问★IT学习者★,下载最新版程序

"

 

&

 vbcrlf         Runtime

=

FormatNumber

((endtime

-

startime)

*

1000

,

2

)         

if

 Runtime

>

0

 

then

            

if

 Runtime

>

1000

 

then

                OutStr 

=

 OutStr 

&

 

"

页面执行时间:约

"

&

 

FormatNumber

(runtime

/

1000

,

2

&

 

"

"

            

else

                OutStr 

=

 OutStr 

&

 

"

页面执行时间:约

"

&

 Runtime 

&

 

"

毫秒

"

            

end

 

if

            

end

 

if

        OutStr 

=

 OutStr 

&

 

"

  

"

        OutStr 

=

 OutStr 

&

 

"

"

 

+

 

"

learner.com/aspcheck/' target='_blank'>ITlearner AspCheck 

"

 

&

 SysVersion 

&

 

"

"

                                        OutStr 

=

 OutStr 

&

 

"

"

        Response.Write(OutStr)    

End Sub

        

Public

 

Function

 getEngVerVBS()        getEngVerVBS

=

ScriptEngineMajorVersion

() 

&

"

.

"

&

ScriptEngineMinorVersion

() 

&

"

.

"

 

&

 

ScriptEngineBuildVersion

() 

&

 

"

 

"

    

End Function

End

 class

Dim

 theTestObj(

25

,

1

)    theTestObj(

0

,

0

=

 

"

MSWC.AdRotator

"

    theTestObj(

1

,

0

=

 

"

MSWC.BrowserType

"

    theTestObj(

2

,

0

=

 

"

MSWC.NextLink

"

    theTestObj(

3

,

0

=

 

"

MSWC.Tools

"

    theTestObj(

4

,

0

=

 

"

MSWC.Status

"

    theTestObj(

5

,

0

=

 

"

MSWC.Counters

"

    theTestObj(

6

,

0

=

 

"

MSWC.PermissionChecker

"

    theTestObj(

7

,

0

=

 

"

WScript.Shell

"

    theTestObj(

8

,

0

=

 

"

Microsoft.XMLHTTP

"

    theTestObj(

9

,

0

=

 

"

Scripting.FileSystemObject

"

    theTestObj(

9

,

1

=

 

"

(FSO 文本文件读写)

"

    theTestObj(

10

,

0

=

 

"

ADODB.Connection

"

    theTestObj(

10

,

1

=

 

"

(ADO 数据对象)

"

        theTestObj(

11

,

0

=

 

"

SoftArtisans.FileUp

"

    theTestObj(

11

,

1

=

 

"

(SA-FileUp 文件上传)

"

    theTestObj(

12

,

0

=

 

"

SoftArtisans.ImageGen

"

    theTestObj(

12

,

1

=

 

"

(SA 的图像读写组件)

"

    theTestObj(

13

,

0

=

 

"

LyfUpload.UploadFile

"

    theTestObj(

13

,

1

=

 

"

(刘云峰的文件上传组件)

"

    theTestObj(

14

,

0

=

 

"

Persits.Upload

"

    theTestObj(

14

,

1

=

 

"

(ASPUpload 文件上传)

"

    theTestObj(

15

,

0

=

 

"

w3.upload

"

    theTestObj(

15

,

1

=

 

"

(Dimac 文件上传)

"

    theTestObj(

16

,

0

=

 

"

JMail.SmtpMail

"

    theTestObj(

16

,

1

=

 

"

(Dimac JMail 邮件收发)

"

    theTestObj(

17

,

0

=

 

"

CDONTS.NewMail

"

    theTestObj(

17

,

1

=

 

"

(虚拟 SMTP 发信)

"

    theTestObj(

18

,

0

=

 

"

Persits.MailSender

"

    theTestObj(

18

,

1

=

 

"

(ASPemail 发信)

"

    theTestObj(

19

,

0

=

 

"

SmtpMail.SmtpMail.1

"

    theTestObj(

19

,

1

=

 

"

(SmtpMail 发信)

"

    theTestObj(

20

,

0

=

 

"

PE_Common.Site

"

    theTestObj(

20

,

1

=

 

"

(动易2005组件)

"

    %

>

<

!DOCTYPE HTML 

PUBLIC

 

"

-//W3C//DTD HTML 4.0 Transitional//EN

"

 

>

<

html

>

<

head

>

<

meta http

-

equiv

=

"

Content-Type

"

 content

=

"

text/html; charset=gb2312

"

>

<

title

>

ASP探针

title

>

<

style type

=

"

text/css

"

>

<

!

--

body        {font

-

size:12px;margin

-

left

:50px;background:#FFF;line

-

height:

1.5

;font

-

family:宋体,arial;color:#

000

;}td,span {font

-

size:12px;word

-

break:break

-

all;word

-

wrap:break

-

word;line

-

height:

1.2

;}form        {margin:

0

;}#top        {width:600px;margin:8px 

0

;text

-

align:center;}#bottom    {border:1px dotted #

183789

;width:600px;margin

-

top:10px;text

-

align:center;padding:5px 

0

;}h3            {font

-

size:30px;margin:

0

;}h3 

sub

    {font

-

size:14px;font

-

weight:normal;}a       {color:#

000

; text

-

decoration:none}a:hover {color:#F00;}.input  {border:1px solid #0099CF;}.btn_c  {background:#0099CF;border:1px solid #0099CF;color:#FFF;font

-

size:12px;}.PicBar {background:#0099CF;border:1px solid #

000

;height:12px;vertical

-

align:middle;}#txt_speed{position:absolute;height:30px;z

-

index:

1000

;}.frame_box{border:

0

;width:600px;margin

-

top:5px;}.item_title_head{font

-

weight:bold;}.item_title{background:#0099CF;text

-

align:center;color:#FFF;padding:3px;}.item_title a{color:#FFF;}.item_title_other{cursor:hand;}.item_content{width:600px;}.item_content_head{background:#9CF;text

-

indent:12px;}.item_tr1{text

-

indent:8px;background:#FFF;}.item_tr2{text

-

align:center;background:#FFF;height:18px;}.font_1{color:#

888

;}.font_2{color:#

080

;}.font_3{color:#F00;}

-->

style

>

<

script language

=

"

JavaScript

"

 runat

=

"

server

"

>

    

function

 getEngVerJs(){        try{            return 

ScriptEngineMajorVersion

() 

+

"

.

"

+

ScriptEngineMinorVersion

()

+

"

.

"

+

 

ScriptEngineBuildVersion

() 

+

 

"

 

"

;        }catch(e){            return 

"

服务器不支持此项检测

"

;        }            }

script

>

<

script language

=

"

JavaScript

"

 type

=

"

text/javascript

"

>

<

!

--

function

 Checksearchbox(form1){

if

(form1.classname.value 

==

 

""

){    alert(

"

请输入你要检测的组件名!

"

);    form1.classname.focus();    return 

false

;}}

function

 showsubmenu(sid){whichEl 

=

 

eval

(

"

submenu

"

 

+

 sid);

if

 (whichEl.style.display 

==

 

"

none

"

){

eval

(

"

submenu

"

 

+

 sid 

+

 

"

.style.display=

"

"

;

"

);

eval

(

"

txt

"

 

+

 sid 

+

 

"

.innerHTML=

"

<

span title

=

'

关闭此项'>x";");

}

else

{

eval

(

"

submenu

"

 

+

 sid 

+

 

"

.style.display=

"

none

"

;

"

);

eval

(

"

txt

"

 

+

 sid 

+

 

"

.innerHTML=

"

<

span title

=

'

打开此项'>y";");

}}

-->

script

>

head

>

<

body

>

<

a name

=

"

top

"

>

a

>

<

div id

=

"

top

"

>

<

h3

><

a href

=

"

<%=hx.FileName%>

"

>

ASP探针

a

>

h3

>

div

>

<

%

dim

 actionaction

=

request(

"

action

"

)

select

 

case

 action

case

 

"

Custom_ObjInfo

"

    

Call

 menu2%

><

div class

=

"

frame_box

"

><

%

Call

 Custom_ObjInfo%

>

div

>

<

%Response.End

case

 

"

SystemCheck

"

    

Call

 menu2    

Call

 SystemCheck

end

 

select

Call

 menu

Call

 SystemTest

Call

 ObjTest

Call

 CalculateTest

Call

 DriveTest

Call

 SpeedTesthx.ShowFooter

Set

 hx

=

 

nothing

%

>

<

%

Sub

 menu%

>

选项:

<

a href

=

"

#SystemTest

"

>

服务器有关参数

a

>

 | 

<

a href

=

"

#ObjTest

"

>

服务器组件情况

a

>

 | 

<

a href

=

"

#CalcuateTest

"

>

服务器运算能力

a

>

 | 

<

a href

=

"

#DriveTest

"

>

服务器磁盘信息

a

>

 | 

<

a href

=

"

#SpeedTest

"

>

服务器连接速度

a

><

br

>

 安全:

<

a href

=

"

?action=SystemCheck

"

>

系统用户(组)和进程检测

a

><

br

>

<

%

End Sub

Sub

 menu2    Response.Write 

"

返回

"

&

hx.FileName

&

"

"">主界面

"

End Sub

Sub

 GoTop    Response.Write 

"

 5

"

End Sub

%

>

<

%

Sub

 smenu(i)%

>

    

<

font face

=

"

Wingdings

"

><

span class

=

"

item_title_other

"

 onClick

=

"

showsubmenu(<%=i%>)

"

 id

=

"

txt<%=i%>

"

><

span title

=

"

关闭此项

"

>

x

span

>

span

>

font

>

<

%

End Sub

%

>

<

%

Sub

 SystemTest

on

 

error

 

resume

 

next

%

>

<

a name

=

"

SystemTest

"

>

a

>

 

<

div class

=

"

frame_box

"

>

    

<

div class

=

"

item_title

"

>

    

<

span class

=

"

item_title_head

"

>

服务器有关参数

span

><

%

Call

 GoTop%

>

     

<

%

Call

 smenu(

0

)%

>

        

div

>

    

<

div class

=

"

item_content

"

 id

=

'

submenu0'>

        

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td width

=

"

110

"

>

服务器名

td

>

          

<

td width

=

"

185

"

><

%

=

Request.ServerVariables(

"

SERVER_NAME

"

)%

>

td

>

          

<

td width

=

"

110

"

>

服务器操作系统

td

>

          

<

td width

=

"

185

"

><

%

=

Request.ServerVariables(

"

OS

"

)%

>

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

服务器IP

td

>

          

<

td

><

%

=

Request.ServerVariables(

"

LOCAL_ADDR

"

)%

>

td

>

          

<

td

>

服务器端口

td

>

          

<

td

><

%

=

Request.ServerVariables(

"

SERVER_PORT

"

)%

>

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

服务器时间

td

>

          

<

td

><

%

=

now

%

>

td

>

          

<

td

>

服务器CPU数量

td

>

          

<

td

><

%

=

Request.ServerVariables(

"

NUMBER_OF_PROCESSORS

"

)%

>

             个

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

IIS版本

td

>

          

<

td

><

%

=

Request.ServerVariables(

"

SERVER_SOFTWARE

"

)%

>

td

>

          

<

td

>

脚本超时时间

td

>

          

<

td

><

%

=

Server.ScriptTimeout%

>

 秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

Application变量

td

>

          

<

td

><

%Response.Write(Application.Contents.Count 

&

 

"

个 

"

)          

if

 Application.Contents.count

>

0

 

then

 Response.Write(

"

[遍历Application变量]

"

)%

>

          

td

>

          

<

td

>

Session变量

td

>

          

<

td

><

%Response.Write(Session.Contents.Count

&

"

个 

"

)          

if

 Session.Contents.count

>

0

 

then

 Response.Write(

"

[遍历Session变量]

"

)%

>

          

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

><

a href

=

"

?action=showvariables

"

>

所有服务器参数

a

>

td

>

          

<

td

><

%Response.Write(Request.ServerVariables.Count

&

"

个 

"

)          

if

 Request.ServerVariables.Count

>

0

 

then

 Response.Write(

"

[遍历服务器参数]

"

)%

>

          

td

>

          

<

td

>

服务器环境变量

td

>

          

<

td

><

%            

dim

 WshShell,WshSysEnv            

Set

 WshShell 

=

 server.CreateObject(

"

WScript.Shell

"

)            

Set

 WshSysEnv 

=

 WshShell.Environment            

if

 err 

then

                Response.Write(

"

服务器不支持WScript.Shell组件

"

)                err.clear            

else

                Response.Write(WshSysEnv.count 

&

"

个 

"

)                

if

 WshSysEnv.count

>

0

 

then

 Response.Write(

"

[遍历环境变量]

"

)              

end

 

if

          %

>

                    

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

服务器解译引擎

td

>

          

<

td colspan

=

"

3

"

>

JScript: 

<

%

=

 getEngVerJs() %

>

 | VBScript: 

<

%

=

hx.getEngVerVBS()%

>

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

本文件实际路径

td

>

          

<

td colspan

=

"

3

"

><

%

=

server.mappath(Request.ServerVariables(

"

SCRIPT_NAME

"

))%

>

td

>

        

tr

>

      

table

>

      

<

%

if

 action

=

"

showapp

"

 

or

 action

=

"

showsession

"

 

or

 action

=

"

showvariables

"

 

or

 action

=

"

showwsh

"

 

then

    showvariable(action)

end

 

if

%

>

    

div

>

div

>

<

%

End Sub

Sub

 showvariable(action)%

>

<

table width

=

"

100%

"

 border

=

"

0

"

 cellpadding

=

"

3

"

 cellspacing

=

"

1

"

 bgcolor

=

"

#0099CC

"

>

  

<

tr class

=

"

item_content_head

"

>

     

<

td colspan

=

"

2

"

>

      

<

%    

'

on error resume next

    

dim

 Item,xTestObj,outstr        Response.Write(

"

"

)    

if

 action

=

"

showapp

"

 

then

        Response.Write(

"

遍历Application变量

"

)        

set

 xTestObj

=

Application.Contents    

elseif

 action

=

"

showsession

"

 

then

        Response.Write(

"

遍历Session变量

"

)        

set

 xTestObj

=

Session.Contents    

elseif

 action

=

"

showvariables

"

 

then

        Response.Write(

"

遍历服务器参数

"

)        

set

 xTestObj

=

Request.ServerVariables    

elseif

 action

=

"

showwsh

"

 

then

        Response.Write(

"

遍历环境变量

"

)        

dim

 WshShell        

Set

 WshShell 

=

 server.CreateObject(

"

WScript.Shell

"

)        

set

 xTestObj

=

WshShell.Environment    

end

 

if

        Response.Write 

"

(

"

&

hx.FileName

&

"

"">关闭)

"

    %

>

    

td

>

  

tr

>

  

<

tr bgcolor

=

"

#FFFFFF

"

>

     

<

td width

=

"

125

"

>

变量名

td

>

    

<

td width

=

"

470

"

>

td

>

  

tr

>

  

<

%    

if

 err 

then

        outstr 

=

 

"

没有符合条件的变量

"

        err.clear    

else

        

dim

 w        

if

 action

=

"

showwsh

"

 

then

            

for

 

each

 Item in xTestObj                w

=

split

(Item,

"

=

"

)                outstr 

=

 outstr 

&

 

"

"

                outstr 

=

 outstr 

&

 

"

"

 

&

 w(

0

&

 

"

"

                 outstr 

=

 outstr 

&

 

"

"

 

&

 w(

1

&

 

"

"

                 outstr 

=

 outstr 

&

 

"

"

                     

next

        

else

            

dim

 i            

for

 

each

 Item in xTestObj                outstr 

=

 outstr 

&

 

"

"

                outstr 

=

 outstr 

&

 

"

"

 

&

 Item 

&

 

"

"

                     outstr 

=

 outstr 

&

 

"

"

                 

if

 

IsArray

(xTestObj(Item)) 

then

                            

for

 i

=

0

 

to

 

ubound

(xTestObj(Item))

-

1

                        

if

 

IsArray

(xTestObj(Item)(i)) 

then

                        outstr 

=

 outstr 

&

 

"

数组

"

 

&

 

"


"

                                            

else

                        outstr 

=

 outstr 

&

 hx.formatvariables(xTestObj(Item)(i)) 

&

 

"


"

                        

end

 

if

                    

next

                

else

                    outstr 

=

 outstr 

&

 hx.formatvariables(xTestObj(Item))                

end

 

if

                    outstr 

=

 outstr 

&

 

"

"

                outstr 

=

 outstr 

&

 

"

"

             

next

        

end

 

if

    

end

 

if

        Response.Write(outstr)            

set

 xTestObj

=

nothing

        %

>

table

>

<

%

End Sub

%

>

<

%

Sub

 ObjTest%

>

<

a name

=

"

ObjTest

"

>

a

>

<

div class

=

"

frame_box

"

>

    

<

div class

=

"

item_title

"

>

    

<

span class

=

"

item_title_head

"

>

服务器组件情况

span

><

%

Call

 GoTop%

>

    

<

%

Call

 smenu(

1

)%

>

    

div

>

    

<

div class

=

"

item_content

"

 id

=

'

submenu1'>

                

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_content_head

"

>

           

<

td colspan

=

"

2

"

><

font face

=

'

Webdings'>4 IIS自带的ASP组件

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td width

=

"

450

"

>

组 件 名 称

td

>

          

<

td width

=

"

150

"

>

支持及版本

td

>

        

tr

>

        

<

%hx.GetObjInfo 

0

,

10

%

>

      

table

>

      

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_content_head

"

>

           

<

td colspan

=

"

2

"

><

font face

=

'

Webdings'>4 网站常用组件 

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td width

=

"

450

"

>

组 件 名 称

td

>

          

<

td width

=

"

150

"

>

支持及版本

td

>

        

tr

>

        

<

%hx.GetObjInfo 

11

,

20

%

>

      

table

>

      

<

%

Call

 Custom_ObjInfo()%

>

    

div

>

div

>

<

%

End Sub

Sub

 Custom_ObjInfo%

>

      

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

  bgcolor

=

"

#0099CF

"

>

                

<

tr class

=

"

item_content_head

"

>

           

<

td

><

font face

=

'

Webdings'>4 其他组件支持情况检测 

        

tr

>

                

<

tr

>

           

<

td height

=

"

30

"

 bgcolor

=

"

#FFFFFF

"

>

          

<

form action

=

"

?action=Custom_ObjInfo

"

 method

=

"

post

"

>

                      输入你要检测的组件的ProgId或ClassId               

<

input class

=

"

input

"

 type

=

"

text

"

 value

=

""

 name

=

"

classname

"

 size

=

"

40

"

>

               

<

input type

=

"

submit

"

 value

=

"

确定

"

 class

=

"

btn_c

"

 name

=

"

submit1

"

 onClick

=

"

return Checksearchbox(this.form);

"

>

          

form

>

           

td

>

                

tr

>

<

%        

Dim

 strClass    strClass 

=

 

Trim

(Request.Form(

"

classname

"

))    

If

 strClass 

<>

 

""

 

then

        Response.Write 

"

您指定的组件的检查结果:

"

      

If

 

Not

 hx.IsObjInstalled(strClass) 

then

         Response.Write 

"

很遗憾,该服务器不支持

"

 

&

 strclass 

&

 

"

组件!

"

      

Else

        Response.Write 

"

"

        Response.Write 

"

 恭喜!该服务器支持

"

 

&

 strclass 

&

 

"

组件。

"

        

If

 hx.getver(strclass)

<>

""

 

then

        Response.Write 

"

 该组件版本是:

"

 

&

 hx.getver(strclass)        

End

 

if

        Response.Write 

"

"

      

End

 

If

      Response.Write 

"

"

      

end

 

if

%

>

      

table

>

<

%

End Sub

Sub

 CalculateTest%

><

a name

=

"

CalcuateTest

"

>

a

>

<

div class

=

"

frame_box

"

>

    

<

div class

=

"

item_title

"

>

    

<

span class

=

"

item_title_head

"

>

服务器运算能力

span

><

%

Call

 GoTop%

>

    

<

%

Call

 smenu(

2

)%

>

    

div

>

    

<

div class

=

"

item_content

"

 id

=

'

submenu2'>

            

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_content_head

"

>

           

<

td colspan

=

"

3

"

><

font face

=

'

Webdings'>4 让服务器执行50万次加法(整数运算)和20万次开方(浮点运算),记录其所使用的时间。 

          

td

>

        

tr

>

        

<

tr class

=

"

item_tr2

"

>

           

<

td width

=

"

400

"

>

可 供 参 考 的 服 务 器 列 表

td

>

          

<

td width

=

"

100

"

>

整数运算

td

>

          

<

td width

=

"

100

"

>

浮点运算

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

ITlearner的电脑

&

nbsp; (CPU:Celeron 2G

&

nbsp; 内存:512M)

td

>

          

<

td

>

242.19

 毫秒

td

>

          

<

td

>

191.41

 毫秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

ITlearner的服务器

&

nbsp;(CPU:P4 

3

.0G(1M) 内存:

1

.5G)

td

>

          

<

td

>

187.50

 毫秒

td

>

          

<

td

>

171.88

 毫秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

><

a href

=

"

http://union.itlearner.com

"

 target

=

"

_blank

"

>

中国频道虚拟主机

a

>&

nbsp; [

2005

/

08

/

08

]

td

>

          

<

td

>

375.00

 毫秒

td

>

          

<

td

>

328.13

 毫秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

><

a href

=

"

http://flash.itlearner.com

"

 target

=

"

_blank

"

>

东南数据虚拟主机

a

>&

nbsp; [

2005

/

08

/

08

]

td

>

          

<

td

>

343.75

 毫秒

td

>

          

<

td

>

312.50

 毫秒

td

>

              

tr

>

         

<

tr class

=

"

item_tr1

"

>

           

<

td

><

a href

=

"

http://www.iva.cn

"

 target

=

"

_blank

"

>

伊瓦科技虚拟主机

a

>&

nbsp; [

2005

/

08

/

08

]

td

>

          

<

td

>

203.13

 毫秒

td

>

          

<

td

>

187.50

 毫秒

td

>

              

tr

>

                                  

<

%    

dim

 i,t1,t2,tempvalue,runtime1,runtime2    

'

开始计算50万次加法所需时间

    t1

=

timer

()    

for

 i

=

1

 

to

 

500000

        tempvalue

=

 

1

 

+

 

1

    

next

    t2

=

timer

()    runtime1

=

formatnumber

((t2

-

t1)

*

1000

,

2

)        

'

开始计算20万次开方所需时间

    t1

=

timer

()    

for

 i

=

1

 

to

 

200000

        tempvalue

=

 

2

^

0.5

    

next

    t2

=

timer

()    runtime2

=

formatnumber

((t2

-

t1)

*

1000

,

2

)%

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

><

span class

=

"

font_3

"

>

您正在使用的这台服务器

span

>&

nbsp; 

<

input name

=

"

button

"

 type

=

"

button

"

 class

=

"

btn_c

"

 onClick

=

"

document.location.href='<%=hx.FileName%>'

"

 value

=

"

重新测试

"

>

           

td

>

          

<

td

><

span class

=

"

font_3

"

><

%

=

runtime1%

>

 毫秒

span

>

td

>

          

<

td

><

span class

=

"

font_3

"

><

%

=

runtime2%

>

 毫秒

span

>

td

>

        

tr

>

      

table

>

    

div

>

div

>

<

%

End Sub

Sub

 DriveTest    

On

 

Error

 

Resume

 

Next

    

Dim

 fo,d,xTestObj    

set

 fo

=

Server.Createobject(

"

Scripting.FileSystemObject

"

)    

set

 xTestObj

=

fo.Drives%

>

<

a name

=

"

DriveTest

"

>

a

>

<

div class

=

"

frame_box

"

>

    

<

div class

=

"

item_title

"

>

    

<

span class

=

"

item_title_head

"

>

服务器磁盘信息

span

><

%

Call

 GoTop%

>

    

<

%

Call

 smenu(

4

)%

>

        

div

>

    

<

div class

=

"

item_content

"

 id

=

'

submenu4'>

        

<

%

if

 hx.IsObjInstalled(

"

Scripting.FileSystemObject

"

then

%

>

      

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_content_head

"

>

           

<

td colspan

=

"

7

"

><

font face

=

'

Webdings'>4 服务器磁盘信息

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td width

=

"

90

"

>

磁盘类型

td

>

          

<

td width

=

"

35

"

>

盘符

td

>

          

<

td width

=

"

35

"

>

可用

td

>

          

<

td width

=

"

100

"

>

卷标

td

>

          

<

td width

=

"

80

"

>

文件系统

td

>

          

<

td width

=

"

130

"

>

可用空间

td

>

          

<

td width

=

"

130

"

>

总空间

td

>

        

tr

>

        

<

%    

for

 

each

 d in xTestObj        Response.write 

"

"

        Response.write 

"

"

&

hx.dtype(d.DriveType)

&

"

"

        Response.write 

"

"

&

d.DriveLetter

&

"

"

                

if

 d.DriveLetter 

=

 

"

A

"

 

then

        Response.Write 

"

为防止影响服务器,不检查软驱

"

        

else

        Response.write 

"

"

        

if

 d.isready 

then

            Response.Write 

"

"

            Response.write 

"

"

            Response.write 

"

"

&

d.VolumeName

&

"

"

            Response.write 

"

"

&

d.FileSystem

&

"

"

                Response.write 

"

"

&

hx.formatdsize(d.FreeSpace)

&

"

"

            Response.write 

"

"

&

hx.formatdsize(d.TotalSize)

&

"

"

        

else

            Response.Write 

"

×

"

            Response.Write 

"

 可能是磁盘有问题,或者程序没有读取权限

"

                    

end

 

if

                     

end

 

if

             

next

%

>

      

table

>

      

<

%    

Dim

 filePath,fileDir,fileDrive    filePath 

=

 server.MapPath(

"

.

"

)    

set

 fileDir 

=

 fo.GetFolder(filePath)    

set

 fileDrive 

=

 fo.GetDrive(fileDir.Drive)      %

>

      

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_content_head

"

>

           

<

td colspan

=

"

6

"

><

font face

=

'

Webdings'>4 当前文件夹信息 (<%=filePath%>)

        

tr

>

        

<

tr class

=

"

item_tr2

"

>

           

<

td width

=

"

100

"

>

已用空间

td

>

          

<

td width

=

"

100

"

>

可用空间

td

>

          

<

td width

=

"

70

"

>

文件夹数

td

>

          

<

td width

=

"

70

"

>

文件数

td

>

          

<

td width

=

"

130

"

>

创建时间

td

>

          

<

td width

=

"

130

"

>

修改时间

td

>

        

tr

>

        

<

%        Response.write 

"

"

        Response.write 

"

"

&

hx.formatdsize(fileDir.Size)

&

"

"

        Response.write 

"

"

        Response.write hx.formatdsize(fileDrive.AvailableSpace)        

if

 err 

then

        Response.write 

"

没有权限读取

"

        

error

.clear        

end

 

if

        Response.write 

"

"

        Response.write 

"

"

&

fileDir.SubFolders.Count

&

"

"

        Response.write 

"

"

&

fileDir.Files.Count

&

"

"

                                Response.write 

"

"

&

fileDir.DateCreated

&

"

 

"

        Response.write 

"

"

&

fileDir.DateLastModified

&

"

 

"

        

Dim

 i,t1,t2,runtime,TestFileName    

Dim

 tempfo    t1

=

 

timer

()    TestFileName

=

server.mappath(

"

ITlearner_Test.txt

"

)    

for

 i

=

1

 

to

 

30

    

set

 tempfo

=

fo.CreateTextFile(TestFileName,

true

)        tempfo.WriteLine 

"

It's a test file.

"

    

set

 tempfo

=

nothing

    

set

 tempfo

=

fo.OpenTextFile(TestFileName,

8

,

0

)        tempfo.WriteLine 

"

It's a test file.

"

    

set

 tempfo

=

nothing

    

set

 tempfo

=

fo.GetFile(TestFileName)        tempfo.delete 

True

    

set

 tempfo

=

nothing

        

next

    t2

=

    

timer

()    runtime

=

formatnumber

((t2

-

t1)

*

1000

,

2

)         %

>

      

table

>

      

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_content_head

"

>

           

<

td colspan

=

"

2

"

><

font face

=

'

Webdings'>4 磁盘文件操作速度测试 (重复创建、写入、追加和删除文本文件30次,记录其所使用的时间)

        

tr

>

        

<

tr class

=

"

item_tr2

"

>

           

<

td width

=

"

400

"

>

可 供 参 考 的 服 务 器 列 表

td

>

          

<

td width

=

"

200

"

>

完成时间

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

ITlearner的电脑

&

nbsp; (CPU:Celeron 2G

&

nbsp; 内存:512M)

td

>

          

<

td

>

203.13

 ~ 

250.00

 毫秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

ITlearner的服务器

&

nbsp;(CPU:P4 

3

.0G(1M) 内存:

1

.5G)

td

>

          

<

td

>

140.63

 ~ 

157.23

 毫秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

中国频道虚拟主机

&

nbsp; [

2005

/

08

/

08

]

td

>

          

<

td

>

656.25

 ~ 

718.75

 毫秒

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

东南数据虚拟主机

&

nbsp; [

2005

/

08

/

08

]

td

>

          

<

td

>

500.25

 ~ 

578.13

 毫秒

td

>

        

tr

>

                

<

tr class

=

"

item_tr1

"

>

           

<

td

><

span class

=

"

font_3

"

>

您正在使用的这台服务器

span

>&

nbsp; 

<

input name

=

"

button2

"

 type

=

"

button

"

 class

=

btn_c onClick

=

"

document.location.href='<%=hx.FileName%>'

"

 value

=

"

重新测试

"

>

           

td

>

          

<

td

><

span class

=

"

font_3

"

><

%

=

runtime%

>

 毫秒

span

>

td

>

        

tr

>

      

table

>

      

<

%          

else

        Response.write 

"

 您的服务器或租用的空间不支持FSO组件,无法进行此项测试!

"

    

end

 

if

%

>

    

div

>

div

>

<

%

End Sub

Sub

 SpeedTestResponse.Flush()%

>

<

a name

=

"

SpeedTest

"

>

a

>

<

div class

=

"

frame_box

"

>

    

<

div class

=

"

item_title

"

>

    

<

span class

=

"

item_title_head

"

>

服务器连接速度

span

><

%

Call

 GoTop%

><

%

Call

 smenu(

3

)%

>

    

div

>

<

%    

if

 action

=

"

SpeedTest

"

 

then

%

>

    

<

div id

=

"

txt_speed

"

>

网速测试中,请稍候...

div

>

<

%    

end

 

if

%

>

        

<

div class

=

"

item_content

"

 id

=

'

submenu3'>

            

<

table width

=

"

100%

"

 border

=

"

0

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td width

=

"

80

"

>

接入设备

td

>

          

<

td width

=

"

405

"

>

连接速度(理想值)

td

>

          

<

td width

=

"

115

"

>

下载速度(理想值)

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

56k Modem

td

>

          

<

td

><

img src

=

""

 alt

=

""

 class

=

"

PicBar

"

 width

=

"

1%

"

>

 

56

 Kbps

td

><

td

>

7.0

 k

/

s

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

2M ADSL

td

>

          

<

td

><

img src

=

""

 alt

=

""

 class

=

"

PicBar

"

 width

=

"

10%

"

>

 

2000

 Kbps

td

><

td

>

250.0

 k

/

s

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

5M FTTP

td

>

          

<

td

><

img src

=

""

 alt

=

""

 class

=

"

PicBar

"

 width

=

"

180

"

>

 

5000

 Kbps

td

>

          

<

td

>

625.0

 k

/

s

td

>

        

tr

>

        

<

tr class

=

"

item_tr1

"

>

           

<

td

>

当前连接

td

>

          

<

td

>

          

<

%    

if

 action

=

"

SpeedTest

"

 

then

        

dim

 i        

With

 Response        .Write(

"

var tSpeedStart=new Date();

"

)            .Write(

"

"

&

 

chr

(

13

&

 

chr

(

10

)        .Write(

"

var tSpeedEnd=new Date();

"

&

 

chr

(

13

&

 

chr

(

10

)                .Write(

"

"

)        .Write(

"

var iSpeedTime=0;iSpeedTime=(tSpeedEnd - tSpeedStart) / 1000;

"

)        .Write(

"

if(iSpeedTime>0) iKbps=Math.round(Math.round(100 * 8 / iSpeedTime * 10.5) / 10); else iKbps=10000 ;

"

)        .Write(

"

var iShowPer=Math.round(iKbps / 100);

"

)                .Write(

"

if(iShowPer<1) iShowPer=1;  else if(iShowPer>82) iShowPer=82;

"

)        .Write(

"

"

&

 

chr

(

13

&

 

chr

(

10

)                .Write(

"

"

)         .Write(

"

document.write(' ' + iKbps + ' Kbps');

"

)        .Write(

"

"

&

 

chr

(

13

&

 

chr

(

10

)        .Write(

"

"

)        .Write(

"

"

)        .Write(

"

document.write(Math.round(iKbps/8*10)/10+ ' k/s');

"

)                .Write(

"

"

&

 

chr

(

13

&

 

chr

(

10

)                        .Write(

"

"

)        .Write(

"

"

)        .Write(

"

txt_speed.innerHTML=""网速测试完毕!"";

"

)            .Write(

"

txt_speed.style.display=""none"";

"

)                        .Write(

"

"

&

 

chr

(

13

&

 

chr

(

10

)                

End

 

With

    

else

        Response.Write 

"

开始测试

"

    

end

 

if

%

>

          

td

>

        

tr

>

      

table

>

    

div

>

div

>

<

%

End Sub

%

>

<

%

Sub

 SystemCheck()%

>

<

div class

=

"

frame_box

"

>

    

<

div class

=

"

item_title

"

>

    

<

span class

=

"

item_title_head

"

>

系统用户(组)和进程检测

span

>

    

div

>

    

<

div class

=

"

item_content

"

>

  

<

table border

=

"

0

"

 width

=

"

100%

"

 cellspacing

=

"

1

"

 cellpadding

=

"

3

"

 bgcolor

=

"

#0099CF

"

>

    

<

tr class

=

"

item_content_head

"

>

             

<

td colspan

=

"

2

"

><

font face

=

'

Webdings'>4 如果下面列出了系统用户(组)和进程,则说明系统可能存在安全隐患。

    

tr

>

    

<

tr bgcolor

=

"

#EFEFEF

"

>

      

<

td width

=

"

80

"

 align

=

"

center

"

>

类 型

td

><

td width

=

"

400

"

>

名称及详情

td

>

    

tr

>

<

%    

dim

 obj      

on

 

error

 

resume

 

next

    

for

 

each

 obj in 

getObject

(

"

WinNT://.

"

)%

>

    

<

tr bgcolor

=

"

#FFFFFF

"

>

      

<

td align

=

"

center

"

><

!

--<

%

=

obj.path%

>-->

<

%  

if

 err

=

438

 

then

 Response.Write 

"

系统用户(组)

"

 : 

else

 Response.Write 

"

系统进程

"

%

>

      

td

>

      

<

td

><

%Response.Write obj.Name      

if

 

not

 

error

 

then

 Response.Write 

"

 (

"

 

&

 obj.displayname 

&

 

"

)

"

 

&

 obj.path%

>

      

td

>

    

tr

>

<

%    err.clear                

next

 %

>

  

table

>

  

div

>

div

>

<

%    Response.End

End Sub

%

>

body

>

html

>

 

优惠劵

yanick

关注

关注

0

点赞

0

收藏

觉得还不错?

一键收藏

知道了

1

评论

asp探针,用来检测Web服务器相关特性

下面代码是Asp探针aspCheck.asp%@ Language="VBScript" CODEPAGE="936"%>% Option Explicit %>% Response.Buffer = TrueDim startime     startime=timer()Dim hxSet hx = New Cls_AspCheckclass Cls_AspCheckPublic 

复制链接

扫一扫

专栏目录

乘风asp.net探针 v1.3

10-21

可探测试以下各类信息1.服务器基本信息2.常用系统组件信息3.常用邮件组件、图像组件、文件上传组件信息4.自定义组件信息5.浏览者客户端信息6.空间是否有写入权限,这点很重要,没有写入权限的asp.net空间大部分用不了7.加入判断服务器IP是使用公网iP还是内网IP的功能,现在很多服务器上只绑定了内网IP8.判断服务器是否是否了CDN或云主机的功能9.判断本地时间和服务器比较是否过大,过大可能会引起SSL证书提示失效或cookie过期

乘风asp.net探针 V1.3版 更新内容:1.加入判断服务器IP是使用公网iP还是内网IP的功能,现在很多服务器上只绑定了内网IP2.加入判断服务器是否是否了CDN或云主机的功能3.加入浏览者UserAgent信息显示的功能4.加入了浏览者本地时间显示的功能,如果和服务器相差大于1小时会提示,相差可能会引起SSL证书提示失效或cookie过期

asp.net探针,aspx探针,asp探针

06-29

看到csdn上的那个asp探针竟要了10积分,所以上次一个供大家免费用,呵呵

1 条评论

您还未登录,请先

登录

后发表或查看评论

ASP 阿江探针 1.93-ASP源码.zip

12-12

ASP源码,压缩包解压密码:www.cqlsoft.com

asp探针 asp服务器功能探测

04-28

asp探针 asp服务器功能探测 探测asp服务器所开放的服务

安全篇 ━━ ITlearner ASP探针 V1.2

暂时先用这个名字

12-24

335

最近在整理老的代码,漏洞一大堆;发现了有良心的黑客,上传了不干净的东西,但并没有操作什么。-

警告提示如下:

在您的系统磁盘上发现了一个可疑文件,它可能代表了是黑客成功入侵网站后种植的,建议您先确认文件合法性并处理。总体上,Webshell检测是根据文件行为威胁程度进行打分的,这个文件具备了一定的危险功能,本身具有一定的危险特征,但并不完全保证一定是一个网站后门,也可能是一些包含可以代码的正常网站文件,如果管理员自己部署放置的,可以在前台选择忽略或者标记为误报按钮。同时,如果被告警的文件是一个.log网站

asp服务器探针

flynetcn的专栏

01-05

4067

方法一://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#####################################                               

ASP探针

04-13

ASP探针,查看服务器配置情况

asp用ajax判断输入,AJAX_asp ajax注册验证之 防止用户名输入空格,check.asp 复制代码 代码如下: < - phpStudy...

weixin_30217001的博客

08-05

102

asp ajax注册验证之 防止用户名输入空格check.asp复制代码 代码如下:''''''''''''''''''''''''''''''''''''Function ReplaceText(fString,patrn,replStr)Set regEx = New RegExp ' 建立正则表达式。regEx.Pattern = patrn ' 设置模式。regEx.IgnoreC...

ASP 空间探针(JScript 写的)

10-13

ASP 空间探针(JScript 写的),作者:cocoon sTudio. 2002/12/12

IT学习者ASP探针 v1.3.zip

07-05

是ITlearner以Ajiang和COCOON的ASP探针的代码为原型,结合部分自已原创的代码精心编写,服务器有关参数,服务器组件情况,服务器运算能力,服务器磁盘信息,服务器连接速度

v1.3更新:按Web标准重构,兼容在FireFox下运行,并通过了W3C的校验

iis配置环境监测工具asp探针

11-06

在IIS网络环境中,加载asp探针,测试adp网页文件能否正常使用,以及详细环境配置。

ASP探针+PHP探针+NET探针+jmail收发邮件测试+aspJpeg水印测试+aspUpLoad上传测试

03-28

各种探针和一些常用组件测试工具。

ASP探针+PHP探针+NET探针+jmail收发邮件测试+aspJpeg水印测试+aspUpLoad上传测试

阿江ASP探针 V 1.92

平淡中求进取,柔和里觅激情

06-16

1866

下载地址:http://www.ajiang.net/products/download/aspcheck.zip- 主要功能服务器概况、组件支持情况、内存变量、环境参数检测 连接速度测试、磁盘信息和速度测试、脚本运算能力测试 服务器安全评价 - 相关资料我的Windows服务器安全设置供大家参考 常见组件的技术资料及下载 部分空间商服务器的磁盘和运算能力实测数据集 学会评价虚拟主机空间 - 演示

阿江ASP探针源代码

03-18

v1.9 的新特性: 以积木式的设计思路重新编写代码,功能增加但是结构并不臃肿 改用三维数组保存待检测组件,增加了一些常见的组件,包括国产的Ironsoft和呆呆系列免费组件 增加组件介绍及下载的连接 增加罗列 Application 变量、Session 变量、环境参数、Serv

aspcheck服务器组件检测

05-30

aspcheck 服务器组件检测aspcheck 服务器组件检测aspcheck 服务器组件检测aspcheck 服务器组件检测

SrvProbe++(java) - web服务器探针

09-22

用来查看到web服务器的信息!

使用方法:

1.可以单个查看web服务器版本,并打开网址。

2.将多个网址放到记事本中。然后将文件拖入到程序中,运行检测即可(使用了多线程)!

3.支持检测最近的nginx漏洞。

注意:linux下无法使用拖文件功能.程序很简单,不过大家支持哈原创,给两分应该不贵呀,谢谢!

PHP探针-探测系统的Web服务器运行环境

01-31

PHP探针-探测系统的Web服务器运行环境

C# ASP.NET双向探针(查看本机和服务器) ASP.NET双向探针,既查看本机环境参数,也可查看服务器详细参数,功能强大已经超过了我的想象,运行时间也是出奇的长。功能:把原来属于服务器信息的组件信息脱离出来,并支持现在绝大部分能见到的组件检测。并且支持自定义检测,你可以检测自己想的出来的组件,反正我的想不出来了。

03-04

C# ASP.NET双向探针(查看本机和服务器)

ASP.NET双向探针,既查看本机环境参数,也可查看服务器详细参数,功能强大已经超过了我的想象,运行时间也是出奇的长。功能:把原来属于服务器信息的组件信息脱离出来,并支持现在绝大部分能见到的组件检测。并且支持自定义检测,你可以检测自己想的出来的组件,反正我的想不出来了。

asp 超轻量级web服务器

最新发布

09-06

此外,ASP超轻量级Web服务器还提供了一些基本的功能和特性,如会话管理、服务器端脚本解析、数据库访问等,这些功能可以满足一般的Web开发需求。 最后,尽管ASP超轻量级Web服务器功能较为简单,但它的易用性和灵活...

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

yanick

CSDN认证博客专家

CSDN认证企业博客

码龄18年

暂无认证

206

原创

12万+

周排名

188万+

总排名

93万+

访问

等级

1万+

积分

384

粉丝

41

获赞

218

评论

159

收藏

私信

关注

热门文章

HL7 2.X解析(C#版)

27674

HL7 2.X解析(JAVA版)

27579

Json实例:ajax返回多个值

18934

Mozilla Rhino 简介

16921

使用JMX产品jolokia对Mule esb进行监控

15689

分类专栏

Ajax

24篇

Asp

14篇

Asp.Net

52篇

C#/Framework/WPF

35篇

C/C++

5篇

EXT框架

7篇

flash/flex/fms/air

HL7

8篇

Html/Dhtml/PS/Div+css

9篇

JavaScript

37篇

JQuery框架

4篇

JSP/Java/J2EE

61篇

Php

26篇

Prototype框架

3篇

Unix/Linux/shell/OS

12篇

SOA/ESB/IBMMB/WebService

29篇

Xml/Json

7篇

个人作品

其它文章

8篇

图形图像

8篇

数据库

18篇

智能手机OS

5篇

第三方控件

模式算法

8篇

SWT/JFACE/RCP

JMS/IBMMQ/ActiveMQ

1篇

JAVA动态语言/Groovy/Rhino

最新评论

HL7 2.X解析(C#版)

YYAILL84:

现在国内厂商和医院用hl7哪个版本是2.x还是3.x,还是FHIR

asp探针,用来检测Web服务器相关特性

salvage:

脚本符号不规范,双引号里面又包含双引号。能不能测试能用再放代码出来.

HL7 2.X解析(JAVA版)

FUGUI_:

解决了我的疑惑!谢谢

连接池的好处(C0P3测试)

XCC_昵称:

感谢博主分享,楼主写的真好,学习到了

HL7 2.X解析(C#版)

qq_47822251:

代码之路任重道远,愿跟博主努力习之。

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

使用JMX产品jolokia对Mule esb进行监控

XACML简介

自娱自乐观察者模式

2013年1篇

2012年4篇

2011年32篇

2010年48篇

2009年91篇

2008年72篇

2007年72篇

目录

目录

分类专栏

Ajax

24篇

Asp

14篇

Asp.Net

52篇

C#/Framework/WPF

35篇

C/C++

5篇

EXT框架

7篇

flash/flex/fms/air

HL7

8篇

Html/Dhtml/PS/Div+css

9篇

JavaScript

37篇

JQuery框架

4篇

JSP/Java/J2EE

61篇

Php

26篇

Prototype框架

3篇

Unix/Linux/shell/OS

12篇

SOA/ESB/IBMMB/WebService

29篇

Xml/Json

7篇

个人作品

其它文章

8篇

图形图像

8篇

数据库

18篇

智能手机OS

5篇

第三方控件

模式算法

8篇

SWT/JFACE/RCP

JMS/IBMMQ/ActiveMQ

1篇

JAVA动态语言/Groovy/Rhino

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

.NET无侵入自动化探针原理和主流实现 - InCerry - 博客园

.NET无侵入自动化探针原理和主流实现 - InCerry - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

InCerry

博客园

首页

新随笔

联系

订阅

管理

.NET无侵入自动化探针原理和主流实现

前言

最近,我在微信公众号和博客园分享了一篇关于.NET微服务系统迁移至.NET 6.0的故事的文章,引起了许多读者的关注。其中,许多人对基于 OpenTelemetry .NET 的观测指标和无侵入自动化探针颇感兴趣。事实上,我已计划抽出时间,与大家分享这方面的内容。

巧合的是,在二月末,我收到了来自 OpenTelemetry 中国社区的蒋志伟大佬的邀请,希望我能就 .NET 实现无侵入自动化探针的方法进行分享。因为关于Java等其他语言的自动化探针实现原理已有大量文章,但.NET领域却鲜有介绍,而社区对此也很感兴趣。

然而,因为 .NET 无侵入自动化探针的实现原理相当复杂,理解和完全掌握原理有很大差别。为确保文章质量和严谨性,撰写过程耗时较长,因此现在才能与大家见面。

APM探针

当我们提到 .NET 的 APM 时,许多人首先会想到 SkyWalking 。这是因为 SkyAPM-dotnet 是第一个支持.NET应用程序的开源非商业 APM 探针实现,目前很多 .NET 项目都采用了它。在此,我们要特别感谢刘浩杨等社区领袖的辛勤付出。

除了 SkyWalking 之外, Datadog APM 也是一款功能强大的商业应用性能监测工具,旨在帮助开发人员跟踪、优化并排查应用程序中的性能问题。Datadog APM 适用于多种编程语言和框架,包括 .NET 。通过使用 Datadog 丰富的功能和可视化仪表板,我们能够轻松地识别并改进性能瓶颈。

另一个比较知名的选择是 OpenTelemetry-dotnet-contrib ,这是 CNCF-OpenTelemetry 的 .NET 应用程序 APM 探针实现。虽然它的推出时间比 SkyAPM 和 Datadog APM 稍晚,但由于其开放的标准和开源的实现,许多 .NET 项目也选择使用它。

关于 APM 探针的实现原理,我们主要分为两类来介绍:平台相关指标和组件相关指标。接下来,我们将讨论如何采集这两类指标。

平台相关指标采集

那么APM探针都是如何采集 .NET 平台相关指标呢?其实采集这些指标在 .NET 上是非常简单的,因为.NET提供了相关的API接口,我们可以直接获得这些指标,这里指的平台指标是如 CPU 占用率、线程数量、GC 次数等指标。

比如在 SkyAPM-dotne t项目中,我们可以查看 SkyApm.Core 项目中的 Common 文件夹,文件夹中就有诸如里面有 CPU 指标、GC 指标等平台相关指标采集实现帮助类。

同样,在 OpenTelemetry-dotnet-contrib 项目中,我们可以在 Process 和 Runtime 文件夹中,查看进程和运行时等平台相关指标采集的实现。

这些都是简单的 API 调用,有兴趣的同学可以自行查看代码,本文就不再赘述这些内容。

组件相关指标采集

除了平台相关指标采集,还有组件相关的指标,这里所指的组件相关指标拿 ASP.NET Core 应用程序举例,我们接口秒并发是多少、一个请求执行了多久,在这个请求执行的时候访问了哪些中间件( Redis 、MySql 、Http 调用、RPC 等等),访问中间件时传递的参数(Redis 命令、Sql 语句、请求响应体等等)是什么,访问中间件花费了多少时间。

在 SkyAPM-dotnet 项目中,我们可以直接在src目录找到这些组件相关指标采集的实现代码。

同样在 OpenTelemetry-dotnet-contrib 项目中,我们也可以在src目录找到这些组件相关指标采集代码。

如果看过这两个APM探针实现的朋友应该都知道,组件指标采集是非常依赖DiagnosticSource技术。.NET官方社区一直推荐的的方式是组件开发者自己在组件的关键路径进行埋点,使用DiagnosticSource的方式将事件传播出去,然后其它监测软件工具可以订阅DiagnosticListener来获取组件运行状态。

就拿 ASP.NET Core 来举例,组件源码中有[HostingApplicationDiagnostics.cs](https://github.com/dotnet/aspnetcore/blob/main/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs)这样一个类,这个类中定义了 Hosting 在请求处理过程中的几个事件。

internal const string ActivityName = "Microsoft.AspNetCore.Hosting.HttpRequestIn";

private const string ActivityStartKey = ActivityName + ".Start";

private const string ActivityStopKey = ActivityName + ".Stop";

当 Hosting 开始处理请求时,会检测当前是否有监听者监听这些事件,如果有的话就会写入事件,事件也会携带当前的一些上下文信息,代码如下所示:

以 SkyAPM-dotnet 举例,有对应的HostingTracingDiagnosticProcessor.cs监听事件,然后获取上下文信息记录 APM 埋点信息,代码如下所示:

这种方式的优点有:

高效和高性能:DiagnosticSource 是 .NET 平台自带的框架,使用它硬编码可以享受到编译器和 JIT 相关优化可以避免一些性能开销。组件开发者可以控制事件传递的频率和内容,以达到最佳的性能和资源利用率。

灵活:通过使用 DiagnosticSource,组件开发者可以灵活地定义自己的事件模型,并按需发布事件。这意味着可以轻松地定制自己的监测需求,而不必担心过多的日志数据产生过大的开销。

可扩展性:使用DiagnosticSource可以让组件的监测需求随着时间的推移而演变,而不必担心日志系统的限制。开发者可以根据自己的需要添加新的事件类型,以适应不断变化的监测需求。

易用性:DiagnosticSource的 API 简单易用,订阅事件数据也很容易。这使得使用它进行组件监测变得非常容易,并且可以快速地集成到现有的监测系统中。

可移植性:DiagnosticSource可以在多个平台上运行,包括 Windows、Linux 和 macOS 等。这意味着可以使用相同的事件模型来监测不同的应用程序和服务,从而简化了监测系统的设计和管理。

不过这种方式的缺点也很明显,就是必须由组件开发者显式的添加事件代码,探针的开发者也因此束手束脚,这就导致一些没有进行手动埋点的三方组件都无法添加事件监听,所以现阶段 SkyAPM-dotnet 支持的第三方组件还不是很丰富。

那么其实只要解决如何为没有进行手动埋点的组件库加入埋点就能解决 SkyAPM-dotnet 支持第三方组件多样性的问题。

.NET方法注入

从上一节我们可以知道,目前制约APM支持组件不够丰富的原因之一就是很多组件库都没有进行可观测性的适配,没有在关键路径进行埋点。

那么要解决这个问题其实很简单,我们只需要修改组件库关键路径代码给加上一些埋点就可以了,那应该如何给这些第三方库的代码加点料呢?聊到这个问题我们需要知道一个 .NET 程序是怎么从源代码变得可以运行的。

通常情况下,一个 .NET 程序从源码到运行会经过两次编译(忽略 ReadyToRun 、NativeAOT 、分层编译等情况)。如下图所示:

第一次是使用编译器将 C#/F#/VB/Python/PHP 源码使用 Roslyn 等对应语言编译器编译成 CIL(Common Intermediate Language,公共中间语言)。第二次使用 RuyJit 编译器将 CIL 编译为对应平台的机器码,以 C# 语言举了个例子,如下图所示:

方法注入也一般是发生在这两次编译前后,一个是在 Roslyn 静态编译期间进行方法注入,期间目标 .NET 程序并没有运行,所以这种 .NET 程序未运行的方法注入我们叫它编译时静态注入。而在 RuyJit 期间 .NET程序已经在运行,这时进行方法注入我们叫它运行时动态注入。下表中列出了比较常见方法注入方式:

框架

类型

实现原理

优点

缺点

metalama

静态注入

重写Roslyn编译器,运行时插入代码

源码修改难度低,兼容性好

目前该框架不开源,只能修改源码,不能修改已编译好的代码,会增加编译耗时

Mono.Cecil、Postsharp

静态注入

加载编译后的*.dll文件,修改和替换生成后的CIL代码

兼容性好

使用难度高,需要熟悉 CIL ,会增加编译耗时,会增加程序体积

Harmony

动态注入

创建一个方法签名与原方法一致的方法,修改Jit后原方法汇编,插入jmp跳转到重写后方法

高性能,使用难度低

泛型、分层编译支持不友好

CLR Profile API

动态注入

调用CLR接口重写方法IL代码

功能强大,公开的API支持

实现困难,需要熟悉 CIL ,稍有不慎导致程序崩溃

综合各种优缺点现阶段APM使用最多的是 CLR Profile API 的方式进行方法注入,比如 Azure AppInsights、DataDog、Elastic等.NET探针都是使用这种方式。

基于CLR Profile API 实现APM探针原理

CLR Profile API 简介

在下面的章节中和大家聊一聊基于 CLR Profile API 是如何实现方法注入,以及 CLR Profile API 是如何使用的。

聊到 CLR 探查器,我们首先就得知道 CLR 是什么,CLR(Common Language Runtime,公共语言运行时),可以理解为是托管运行 .NET 程序的平台,它提供了基础类库、线程、JIT 、GC 等语言运行的环境(如下图所示),它功能和 Java 的 JVM 有相似之处,但定位有所不同。

.NET 程序、CLR 和操作系统的关系如下图所示:

那么 CLR 探查器是什么东西呢?根据官方文档的描述,CLR 探查器和相关API的支持从 .NET Framework 1.0就开始提供,它是一个工具,可以使用它来监视另一个 .NET 应用程序的执行情况,它也是一个( .dll )动态链接库,CLR 在启动运行时加载探查器,CLR 会将一些事件发送给探查器,另外探查器也可以通过 Profile API 向 CLR 发送命令和获取运行时信息。下方是探查器和 CLR 工作的简单交互图:

ICorProfilerCallback提供的事件非常多,常用的主要是下方提到这几类:

CLR 启动和关闭事件

应用程序域创建和关闭事件

程序集加载和卸载事件

模块加载和卸载事件

COM vtable 创建和析构事件

实时 (JIT) 编译和代码间距调整事件

类加载和卸载事件

线程创建和析构事件

函数入口和退出事件

异常

托管和非托管代码执行之间的转换

不同运行时上下文之间的转换

有关运行时挂起的信息

有关运行时内存堆和垃圾回收活动的信息

ICorProfilerInfo提供了很多查询和命令的接口,主要是下方提到的这几类:

方法信息接口

类型信息接口

模块信息接口

线程信息接口

CLR 版本信息接口

Callback 事件设置接口

函数 Hook 接口

还有 JIT 相关的接口

通过 CLR Profile API 提供的这些事件和信息查询和命令接口,我们就可以使用它来实现一个无需改动原有代码的 .NET 探针。

自动化探针执行过程

APM 使用 .NET Profiler API 对应用程序进行代码插桩方法注入,以监控方法调用和性能指标从而实现自动化探针。下面详细介绍这一过程:

Profiler注册:在启动应用程序时,.NET Tracer 作为一个分析器(profiler)向 CLR(Common Language Runtime)注册。这样可以让它在整个应用程序生命周期内监听和操纵执行流程。

JIT编译拦截:当方法被即时编译(JIT)时,Profiler API 发送事件通知。.NET Tracer 捕获这些事件,如JITCompilationStarted,从而有机会在方法被编译之前修改其 IL(Intermediate Language)代码。

代码修改插桩:通过操纵IL代码,.NET Tracer 在关键方法的入口和退出点插入跟踪逻辑。这种操作对原始应用程序是透明的,不需要修改源代码。跟踪逻辑通常包括记录方法调用数据、计时、捕获异常等。

上下文传播:为了连接跨服务或异步调用的请求链,.NET Tracer 会将 Trace ID 和 Span ID在分布式系统中进行传递。这使得在复杂的微服务架构中追踪请求变得更加容易。

数据收集:插桩后的代码在运行期间会产生跟踪数据,包括方法调用时间、执行路径、异常信息等。这些数据会被封装成跟踪和跨度(spans),并且通过 APM Agent 发送到 APM 平台进行后续分析和可视化。

通过使用 .NET Profiler API 对应用程序进行方法注入插桩,APM 可以实现对 .NET 程序的详细性能监控,帮助开发者和运维人员发现并解决潜在问题。

第一步,向 CLR 注册分析器的步骤是很简单的,CLR 要求分析器需要实现COM组件接口标准,微软的 COM(Component Object Model)接口是一种跨编程语言的二进制接口,用于实现在操作系统中不同软件组件之间的通信和互操作。通过 COM 接口,组件可以在运行时动态地创建对象、调用方法和访问属性,实现模块化和封装。COM 接口使得开发人员能够以独立、可复用的方式构建软件应用,同时还有助于降低维护成本和提高开发效率。COM 一般需要实现以下接口:

接口(Interfaces):COM 组件使用接口提供一套预定义的函数,这样其他组件就可以调用这些函数。每个接口都有一个唯一的接口标识(IID)。

对象(Objects):COM 对象是实现了一个或多个接口的具体实例。客户端代码通过对象暴露的接口与其进行交互。

引用计数(Reference Counting):COM 使用引用计数管理对象的生命周期。当一个客户端获取到对象的接口指针时,对象的引用计数加一;当客户端不再需要该接口时,引用计数减一。当引用计数减至零时,COM 对象会被销毁。

查询接口(QueryInterface):客户端可以通过 QueryInterface 函数获取 COM 对象所实现的特定接口。这个函数接收一个请求的接口 IID,并返回包含该接口指针的 HRESULT。

类工厂(Class Factories):为了创建对象实例,COM 使用类工厂。类工厂是实现了 IClassFactory 接口的对象,允许客户端创建新的对象实例。

比如 OpenTelemetry 中的class_factory.cpp就是声明了COM组件,其中包括了查询接口、引用计数以及创建实例对象等功能。

然后我们只需要设置三个环境变量,如下所示:

COR_ENABLE_PROFILING:将其设置为1,表示启用 CLR 分析器。

COR_PROFILER: 设置分析器的COM组件ID,使 CLR 能正确的加载分析器。

COR_PROFILER_PATH_32/64: 设置分析器的路径,32位或者是64位应用程序。

通过以上设置,CLR 就可以在启动时通过 COM 组件来调用分析器实现的函数,此时也代表着分析器加载完成。在 OpenTelemetry 和 data-dog 等 APM 中都有这样的设置。

那后面的JIT编译拦截以及其它功能如何实现呢?我们举一个现实存在的例子,如果我们需要跟踪每一次 Reids 操作的时间和执行命令的内容,那么我们在应该修改StackExchange.Redis ExecuteAsyncImpl方法,从message中读取执行命令的内容并记录整个方法耗时。

那么APM如何实现对Redis ExecuteAsyncImpl进行注入的?可以打开dd-trace-dotnet仓库也可以打开opentelemetry-dotnet-instrumentation仓库,这两者的方法注入实现原理都是一样的,只是代码实现上有一些细微的差别。这里我们还是以 dd-trace-dotnet 仓库代码为例。

打开tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation目录,里面所有的源码都是通过方法注入的方式来实现APM埋点,有非常多的组件埋点的实现,比如 MQ 、Redis 、 CosmosDb 、Couchbase 等等。

打开 Redis 的文件夹,可以很容易找到 Redis 进行方法注入的源码,这相当于是一个 AOP 切面实现方法:

[InstrumentMethod(

AssemblyName = "StackExchange.Redis",

TypeName = "StackExchange.Redis.ConnectionMultiplexer",

MethodName = "ExecuteAsyncImpl",

ReturnTypeName = "System.Threading.Tasks.Task`1",

ParameterTypeNames = new[] { "StackExchange.Redis.Message", "StackExchange.Redis.ResultProcessor`1[!!0]", ClrNames.Object, "StackExchange.Redis.ServerEndPoint" },

MinimumVersion = "1.0.0",

MaximumVersion = "2.*.*",

IntegrationName = StackExchangeRedisHelper.IntegrationName)]

[InstrumentMethod(

AssemblyName = "StackExchange.Redis.StrongName",

TypeName = "StackExchange.Redis.ConnectionMultiplexer",

MethodName = "ExecuteAsyncImpl",

ReturnTypeName = "System.Threading.Tasks.Task`1",

ParameterTypeNames = new[] { "StackExchange.Redis.Message", "StackExchange.Redis.ResultProcessor`1[!!0]", ClrNames.Object, "StackExchange.Redis.ServerEndPoint" },

MinimumVersion = "1.0.0",

MaximumVersion = "2.*.*",

IntegrationName = StackExchangeRedisHelper.IntegrationName)]

[Browsable(false)]

[EditorBrowsable(EditorBrowsableState.Never)]

public class ConnectionMultiplexerExecuteAsyncImplIntegration

{

///

/// OnMethodBegin callback

///

/// Type of the target

/// Type of the message

/// Type of the result processor

/// Type of the server end point

/// Instance value, aka `this` of the instrumented method.

/// Message instance

/// Result processor instance

/// State instance

/// Server endpoint instance

/// Calltarget state value

internal static CallTargetState OnMethodBegin(TTarget instance, TMessage message, TProcessor resultProcessor, object state, TServerEndPoint serverEndPoint)

where TTarget : IConnectionMultiplexer

where TMessage : IMessageData

{

string rawCommand = message.CommandAndKey ?? "COMMAND";

StackExchangeRedisHelper.HostAndPort hostAndPort = StackExchangeRedisHelper.GetHostAndPort(instance.Configuration);

Scope scope = RedisHelper.CreateScope(Tracer.Instance, StackExchangeRedisHelper.IntegrationId, StackExchangeRedisHelper.IntegrationName, hostAndPort.Host, hostAndPort.Port, rawCommand);

if (scope is not null)

{

return new CallTargetState(scope);

}

return CallTargetState.GetDefault();

}

///

/// OnAsyncMethodEnd callback

///

/// Type of the target

/// Type of the response, in an async scenario will be T of Task of T

/// Instance value, aka `this` of the instrumented method.

/// Response instance

/// Exception instance in case the original code threw an exception.

/// Calltarget state value

/// A response value, in an async scenario will be T of Task of T

internal static TResponse OnAsyncMethodEnd(TTarget instance, TResponse response, Exception exception, in CallTargetState state)

{

state.Scope.DisposeWithException(exception);

return response;

}

}

这段代码是一个用于监控和跟踪 StackExchange.Redis 库的 APM(应用性能监控)工具集成。它针对 StackExchange.Redis.ConnectionMultiplexer 类的 ExecuteAsyncImpl 方法进行了注入以收集执行过程中的信息。

使用了两个 InstrumentMethod 属性,分别指定 StackExchange.Redis 和 StackExchange.Redis.StrongName 两个程序集。属性包括程序集名称、类型名、方法名、返回类型名等信息以及版本范围和集成名称。

ConnectionMultiplexerExecuteAsyncImplIntegration 类定义了 OnMethodBegin 和 OnAsyncMethodEnd 方法。这些方法在目标方法开始和结束时被调用。

OnMethodBegin 方法创建一个新的 Tracing Scope,其中包含了与执行的 Redis 命令相关的信息(如 hostname, port, command 等)。

OnAsyncMethodEnd 方法在命令执行结束后处理 Scope,在此过程中捕获可能的异常,并返回结果。

而这个 CallTargetState state 中其实包含了上下文信息,有 Span Id 和 Trace Id ,就可以将其收集发送到 APM 后端进行处理。

但是,仅仅只有声明了一个 AOP 切面类不够,我们还需将这个 AOP 切面类应用到 Redis SDK 原有的方法中,这又是如何做到的呢?那么我们就需要了解一下 CLR Profiler API 实现方法注入的原理了。

方法注入底层实现原理

在不考虑 AOT 编译和分层编译特性,一个 .NET 方法一开始的目标地址都会指向 JIT 编译器,当方法开始执行时,先调用 JIT 编译器将 CIL 代码转换为本机代码,然后缓存起来,运行本机代码,后面再次访问这个方法时,都会走缓存以后得本机代码,流程如下所示:

拦截JIT编译

由于方法一般情况下只会被编译一次,一种方法注入的方案就是在 JIT 编译前替换掉对应方法的 MethodBody ,这个在 CLR Profile API 中提供的一个关键的回调。

JITCompilationStarted:通知探查器,即时编译器已经开始编译方法。

我们只需要订阅这个事件,就可以在方法编译开始时将对应的 MethodBody 修改成我们想要的样子,在里面进行 AOP 埋点即可。在JITCompilationStarted事件中重写方法IL的流程大致如下:

捕获JITCompilationStarted事件:当一个方法被即时编译(JIT)时,CLR(Common Language Runtime)会触发JITCompilationStarted事件。通过使用 Profiler API ,分析器可以订阅这个事件并得到一个回调。

确定要修改的方法:在收到JITCompilationStarted事件回调时,分析器需要检查目标方法元数据,例如方法名称、参数类型和返回值类型等,来确定是否需要对该方法进行修改。

获取方法的原始 IL 代码:如果确定要对目标方法进行修改,分析器需要首先获取该方法的原始 IL 代码。这可以通过使用Profiler API 提供的GetILFunctionBody方法来实现。

分析和修改 IL 代码:接下来,分析器需要解析原始 IL 代码,找到适当的位置以插入新的跟踪逻辑。这通常包括方法的入口点(开始执行时)和退出点(返回或抛出异常)。分析器会生成一段新的 IL 代码,用于记录性能指标、捕获异常等。

替换方法的 IL 代码:将新生成的 IL 代码插入到原始 IL 代码中,并使用SetILFunctionBody方法替换目标方法的IL代码。这样,在方法被JIT编译成本地代码时,新的跟踪逻辑也会被包含进去。

继续JIT编译:完成IL代码重写后,分析器需要通知CLR继续JIT编译过程。编译后的本地代码将包含插入的跟踪逻辑,并在应用程序运行期间执行。

我们来看看源码是如何实现的,打开 dd-trace-dotnet 开源仓库,回退到较早的发布版本,有一个 integrations.json 文件,在 dd-trace-dotnet 编译时会自动生成这个文件,当然也可以手动维护,在这个文件里配置了需要 AOP 切面的程序集名称、类和方法,在分析器启动时,就会加载 json 配置,告诉分析器应该注入那些方法。

接下来,我们找到cor_profiler.cpp文件并打开,这是实现 CLR 事件回调的代码,转到关于JITCompilationStarted事件的通知的处理的源码。

由于代码较长,简单的说一下这个函数它做了什么,函数主要用于在 .NET JIT(Just-In-Time)编译过程中执行一系列操作,例如插入启动钩子、修改 IL(中间语言)代码以及替换方法等,以下是它的功能:

函数检查 is_attached_ 和 is_safe_to_block 变量,如果不满足条件,则直接返回。

使用互斥锁保护模块信息,防止在使用过程中卸载模块。

通过给定的 function_id 获取模块 ID 和函数 token。

根据模块 ID 查找模块元数据。

检查是否已在CallTarget模式下注入加载器。

如果符合条件且加载器尚未注入,则在AppDomain中的第一个 JIT 编译方法中插入启动钩子。在最低程度上,必须添加AssemblyResolve事件,以便从磁盘找到 Datadog.Trace.ClrProfiler.Managed.dll 及其依赖项,因为它不再被提供为 NuGet 包。

在桌面版 IIS 环境下,调用 AddIISPreStartInitFlags() 方法来设置预启动初始化标志。

如果未启用CallTarget模式,将对integrations.json配置的方法进行插入和替换,并处理插入和替换调用。

返回 S_OK 表示成功完成操作。

其中有两个关键函数,可以对 .NET 方法进行插入和替换,分别是ProcessInsertionCalls和ProcessReplacementCalls。

其中ProcessInsertionCalls用于那些只需要在方法前部插入埋点的场景,假设我们有以下原始 C# 类:

public class TargetClass

{

public void TargetMethod()

{

Console.WriteLine("This is the original method.");

}

}

现在,我们希望在TargetMethod的开头插入一个新的方法调用。让我们创建一个示例方法,并在WrapperClass中定义它:

修改后,插入InsertedMethod调用的TargetMethod将如下所示:

public class TargetClass

{

public void TargetMethod()

{

WrapperClass.InsertedMethod(); // 这是新插入的方法调用

Console.WriteLine("This is the original method.");

}

}

public class WrapperClass

{

public static void InsertedMethod()

{

Console.WriteLine("This is the inserted method.");

}

}

请注意,上述示例是为了解释目的而手动修改的,实际上这种修改是通过操作IL代码来完成的。在CorProfiler::ProcessInsertionCalls方法中,这些更改是在IL指令级别上进行的,不会直接影响源代码。

修改方法的 IL 代码.NET官方提供了一个帮助类 ILRewriter ,ILRewriter 是一个用于操作C#程序中方法的中间语言(Intermediate Language,IL)代码的工具类。它会将方法的IL代码以链表的形式组织,让我们可以方便的修改IL代码,它通常用于以下场景:

代码注入:在方法体中插入、删除或修改 IL 指令。

代码优化:优化 IL 代码以提高性能。

执行 AOP(面向切面编程):通过动态操纵字节码实现横切关注点(如日志记录、性能度量等)。

ILRewriter 类提供了一系列方法用于读取、修改和写回IL指令序列。例如,在上述CorProfiler::ProcessInsertionCalls方法中,我们使用 ILRewriter 对象导入IL代码,执行所需的更改(如插入新方法调用),然后将修改后的 IL 代码导出并应用到目标方法上。这样可以实现对程序行为的运行时修改,而无需直接更改源代码。

另一个ProcessReplacementCalls方法就是将原有的方法调用实现一个 Proxy ,适用于那些需要捕获异常获取方法返回值的场景,这块代码比较复杂,假设我们有以下 C# 代码,其中我们想要替换OriginalMethod()的调用:

public class TargetClass

{

public int OriginalMethod(int a, int b)

{

return a * b;

}

}

public class CallerClass

{

public void CallerMethod()

{

TargetClass target = new TargetClass();

int result = target.OriginalMethod(3, 4);

Console.WriteLine(result);

}

}

在应用方法调用替换后,CallerMethod()将调用自定义的替换方法WrapperMethod()而不是OriginalMethod()。例如,我们可以使用以下替换方法:

public class WrapperClass

{

public static int WrapperMethod(TargetClass instance, int opCode, int mdToken, long moduleVersionId, int a, int b)

{

Console.WriteLine("Method call replaced.");

return instance.OriginalMethod(a, b);

}

}

经过IL修改后,CallerMethod()看起来大致如下:

public void CallerMethod()

{

TargetClass target = new TargetClass();

int opCode = /* Original CALL or CALLVIRT OpCode */;

int mdToken = /* Metadata token for OriginalMethod */;

long moduleVersionId = /* Module version ID pointer */;

// Call the wrapper method instead of the original method

int result = WrapperClass.WrapperMethod(target, opCode, mdToken, moduleVersionId, 3, 4);

Console.WriteLine(result);

}

现在CallerMethod()将调用WrapperMethod(),在这个例子中,我们记录了一条替换消息,然后继续调用OriginalMethod()。

正如所述,通过捕获JITCompilationStarted事件并对中间语言(IL)进行改写,我们修改方法行为的基本原理。在 .NET Framework 4.5 之前的版本中,这种方式广泛应用于方法改写和植入埋点,从而实现 APM 的自动化探针。然而,此方法也存在以下一些不足之处:

不支持动态更新:JITCompilationStarted 在方法被 JIT 编译之前触发,这意味着它只能在初次编译过程中修改 IL。

更大的性能影响:由于JITCompilationStarted是一个全局事件,它会在每个需要 JIT 编译的方法被调用时触发。因此,如果在此事件中进行 IL 修改,可能会对整个应用程序产生更大的性能影响。

无法控制执行时机:在JITCompilationStarted中重写 IL 时,您不能精确控制何时对某个方法应用更改。

某些情况下,运行时可能选择跳过JIT编译过程,例如对于 NGEN(Native Image Generator,俗称AOT编译)生成的本地映像,此时无法捕获到JITCompilationStarted事件。

在多线程环境下,可能会出现竞争条件,导致一些方法执行的是未更新的代码。

但是我们也无法再其它时间进行重写,因为JIT一般情况下只会编译一次,JIT 已经完成编译以后修改方法 IL 不会再次 JIT ,修改也不会生效。在 .NET Framework 4.5 诞生之前,我们并未拥有更为优美的途径来实现 APM 自动化探测。然而,随着 .NET Framework 4.5 的降临,一条全新的路径终于展现在我们面前。

重新JIT编译

上文中提到了捕获JITCompilationStarted事件时进行方法重写的种种缺点,于是在.NET 4.5中,新增了一个名为RequestReJIT的方法,它允许运行时动态地重新编译方法。RequestReJIT主要用于性能分析和诊断工具,在程序运行过程中,可以为指定的方法替换新的即时编译(JIT)代码,以便优化性能或修复bug。

RequestReJIT提供了一种强大的机制,使开发人员能够在不重启应用程序的情况下热更新代码逻辑。这在分析、监视及优化应用程序性能方面非常有用。它可以在程序运行时动态地替换指定方法的 JIT 代码,而无需关心方法是否已经被编译过。RequestReJIT减轻了多线程环境下的竞争风险,并且可以处理 NGEN 映像中的方法。通过提供这个强大的机制,RequestReJIT使得性能分析和诊断工具能够更有效地优化应用程序性能及修复bug。

使用RequestReJIT重写方法IL的流程如下:

Profiler 初始化:当.NET应用程序启动时,分析器(profiler)会利用Profiler API向CLR(Common Language Runtime)注册。这允许分析器在整个应用程序生命周期内监听和操纵代码执行流程。

确定要修改的方法:分析器需要识别哪些方法需要进行修改。这通常是通过分析方法元数据(如方法名称、参数类型和返回值类型等)来判断的。

为目标方法替换 IL 代码:首先,分析器获取目标方法的原始 IL 代码,并在适当位置插入新的跟踪逻辑。接着,使用 SetILFunctionBody 方法将修改后的 IL 代码设置为目标方法的新 IL 代码。

请求重新 JIT 编译:使用RequestReJIT方法通知 CLR 重新编译目标方法。此时,CLR 会触发ReJITCompilationStarted事件。

捕获ReJITCompilationStarted事件:分析器订阅ReJITCompilationStarted事件,在事件回调中获取到修改后的 IL 代码,订阅结束事件,分析器可以获取本次重新编译是否成功。

生成新的本地代码:CLR 会根据修改后的 IL 代码重新进行 JIT 编译,生成新的本地代码。这样,新的 JIT 代码便包含了插入的跟踪逻辑。

执行新的本地代码:之后,当目标方法被调用时,将执行新生成的本地代码。这意味着插入的跟踪逻辑会在应用程序运行期间起作用,从而收集性能数据和诊断信息。

有了RequestJIT方法,我们可以在任何时间修改方法 IL 然后进行重新编译,无需拦截JIT执行事件,在新版的 dd-trace 触发方法注入放到了托管代码中,托管的 C# 代码直接调用非托管的分析器 C++ 代码进行方法注入,所以不需要单独在 json 文件中配置。

取而代之的是InstrumentationDefinitions.g.cs文件,在编译时会扫描所有标记了InstrumentMethod特性的方法,然后自动生成这个类。

当分析器启动时,会调用Instrumentation.cs类中Initialize()方法,在这个方法内部就会和分析器通讯,将需要进行方法注入的方法传递给分析器。

因为需要和分析器进行通讯,所以需要在分析器中导出可供 C# 代码调用的函数,源码中是interop.cpp导出了 C# 和 C++ 代码互操作的几个函数,同样在 C# 中也要使用P/Invoke技术来定义一个调用类。

分析器接受到需要注入的方法信息以后,会将其加入到方法注入的队列中,然后会重写对应方法至下方这种形式:

/// <摘要>

/// 用calltarget实现重写目标方法体。(这个函数是由ReJIT处理程序触发的)生成的代码结构:

///

/// - 为 TReturn(如果非 void 方法)、CallTargetState、CallTargetReturn/CallTargetReturn 和 Exception 添加局部变量

/// - 初始化局部变量

try

{

try

{

try

{

- 使用对象实例(对于静态方法则为 null)和原始方法参数调用 BeginMethod

- 将结果存储到 CallTargetState 局部变量中

}

catch 当异常不是 Datadog.Trace.ClrProfiler.CallTarget.CallTargetBubbleUpException 时

{

- 调用 LogException(Exception)

}

- 执行原始方法指令

* 所有RET指令都替换为 LEAVE_S。对于非void方法,堆栈上的值首先存储在 TReturn 局部变量中。

}

catch (Exception)

{

- 将异常存储到 Exception 局部变量中

- 抛出异常

}

}

finally

{

try

{

- 使用对象实例(对于静态方法则为null),TReturn局部变量(如果非 void 方法),CallTargetState局部变量和 Exception 局部变量调用 EndMethod

- 将结果存储到 CallTargetReturn/CallTargetReturn 局部变量中

- 如果是非void方法,将 CallTargetReturn.GetReturnValue() 存储到 TReturn 局部变量中

}

catch 当异常不是 Datadog.Trace.ClrProfiler.CallTarget.CallTargetBubbleUpException 时

{

- 调用 LogException(Exception)

}

}

- 如果非 void 方法,则加载 TReturn 局部变量

- RET

最后请求RequestReJIT来重新编译进行 JIT 编译,完成了整个方法的注入。

总结

以上就是目前 .NET 上 APM 主流的无侵入自动化探针的实现原理的简单科普,总体实现是很复杂的,里面还有诸多细节在本文中并未提到。然而,通过了解这些基本概念和技术原理,希望能为您提供一个较为清晰的认识,让您更好地理解 APM 无侵入式探针是如何在 .NET 平台工作的。

如果大家对此话题有兴趣,并希望建立更深入、全面的了解,那么后续可以更新下一篇文章,在接下来的内容中,我们可以实现一个简单版本的 .NET 无侵入探针,并将深入探讨相关实现细节以及如何在实际场景中应用这些方法。

参考文献

.NET探查器文档

深入Java自动化探针技术的原理和实践

作者介绍

InCerry,微软最有价值专家,现就职于同程旅行

.NET性能优化交流群

相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:

如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具

.NET框架底层原理的实现,如垃圾回收器、JIT等等

如何编写高性能的.NET代码,哪些地方存在性能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。目前一群已满,现在开放二群。

如果提示已经达到200人,可以加我微信,我拉你进群: ls1075

另外也创建了QQ群,群号: 687779078,欢迎大家加入。

posted @

2023-04-17 09:02 

InCerry 

阅读(9310) 

评论(40) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 InCerry

Powered by .NET 8.0 on Kubernetes

写了一个开源的ASP.Net的系统信息探针(适用于MS.Net 1.x/2.0和Mono 1.0/2.0)_w3image.image-CSDN博客

>

写了一个开源的ASP.Net的系统信息探针(适用于MS.Net 1.x/2.0和Mono 1.0/2.0)_w3image.image-CSDN博客

写了一个开源的ASP.Net的系统信息探针(适用于MS.Net 1.x/2.0和Mono 1.0/2.0)

最新推荐文章于 2022-07-14 16:59:06 发布

DanceFire

最新推荐文章于 2022-07-14 16:59:06 发布

阅读量9.2k

收藏

2

点赞数

分类专栏:

C#/Java

文章标签:

asp.net

服务器

.net

windows

variables

iis

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/DanceFire/article/details/1901463

版权

C#/Java

专栏收录该内容

11 篇文章

0 订阅

订阅专栏

简介

这两天由于需要一个ASP.Net的服务器信息探针。到网上找了找,似乎没有发现什么开源的ASP.Net的系统信息探针(探测器)。由于技术含量不是很高,于是干脆自己动手丰衣足食了。

到网上找了一下各个ASP.Net系统信息探针,把功能总结了一下,基本上都实现出来了。既然实现了就别藏着掖着了,也没什么技术含量,拿出来开源好了。有谁有更好的想法可以告诉我,如果不费劲,我就加进去。

我把这个放到Google code hosting上面了,需要的可以从上面下载:

http://aspnetsysinfo.googlecode.com/

我这个ASP.Net的系统信息探针与其它探针最大的不同处,是我这个探针除了支持Windows平台的IIS服务器环境,它还支持Linux下的Mono假设的ASP.Net环境。为了让探针更通用,我用反射进行调用2.0相关的类库,在1.0下或者Linux下面,使用不同的方式取得同样的信息。所以我的这个探针支持的系统平台应该是最广的。包括Windows下的.Net 1.0/1.1/2.0 以及以上,和Linux下的

Mono环境的Mono 1.x 无论是Mono .Net 1.0还是

Mono .Net 2.0都可以运行。

目前支持探测的信息有:

探测的信息

系统信息

服务器名 服务器IP 服务器域名 服务器端口 Web服务器版本 请求链接的虚拟路径 请求链接的物理路径 应用程序根路径的虚拟路径 应用程序根路径的物理路径 操作系统 操作系统安装的目录 .Net 版本 .Net 语言 服务器当前时间 服务器持续开机时间 脚本超时时间

处理器信息

处理器个数 处理器Id 处理器类型 处理器Level 处理器OEM Id 页面大小

内存信息

.Net应用程序所影射的当前工作内存大小 物理内存大小 物理空闲内存大小 物理使用空间大小 页面文件大小 可用页面文件大小 虚拟内存大小 可用内存大小

存储器信息

逻辑驱动器信息 驱动器名 卷标 驱动器文件格式 (FAT32, NTFS...) 驱动器类型 (固定硬盘,CDROM...) 空闲和全部的空间

Request Headers

Server Variables

环境变量

Session Information

系统 COM 组件

Adodb.Connection Adodb.RecordSet Adodb.Stream Scripting.FileSystemObject Microsoft.XMLHTTP WScript.Shell MSWC.AdRotator MSWC.BrowserType MSWC.Counters MSWC.NextLink MSWC.PermissionChecker MSWC.Status MSWC.Tools IISSample.ContentRotator IISSample.PageCounter

邮件 COM 组件

JMail.SMTPMail JMail.Message CDONTS.NewMail CDO.Message Persits.MailSender SMTPsvg.Mailer DkQmail.Qmail SmtpMail.SmtpMail Geocel.Mailer

上传 COM 组件

LyfUpload.UploadFile Persits.Upload Ironsoft.UpLoad aspcn.Upload SoftArtisans.FileUp SoftArtisans.FileManager Dundas.Upload w3.upload

图像 COM 组件

SoftArtisans.ImageGen W3Image.Image Persits.Jpeg XY.Graphics Ironsoft.DrawPic Ironsoft.FlashCapture

其他 COM 组件

dyy.zipsvr hin2.com_iis Socket.TCP

使用方法

请从下载页面下载当前版本的zip文件,解压缩后,将 info.aspx 文件置于服务器上任何可以执行 *.aspx 的目录下,然后通过浏览器访问该文件即可。

如,置于服务器 www.example.com 的Web根目录下,那么通过 http://www.example.com/info.aspx,就可以看到结果。

需求

该页面支持Windows的IIS服务器和Linux/Unix下的装有Mono的Apache服务器。

优惠劵

DanceFire

关注

关注

0

点赞

2

收藏

觉得还不错?

一键收藏

知道了

2

评论

写了一个开源的ASP.Net的系统信息探针(适用于MS.Net 1.x/2.0和Mono 1.0/2.0)

简介这两天由于需要一个ASP.Net的服务器信息探针。到网上找了找,似乎没有发现什么开源的ASP.Net的系统信息探针(探测器)。由于技术含量不是很高,于是干脆自己动手丰衣足食了。到网上找了一下各个ASP.Net系统信息探针,把功能总结了一下,基本上都实现出来了。既然实现了就别藏着掖着了,也没什么技术含量,拿出来开源好了。有谁有更好的想法可以告诉我,如果不费劲,我就加进去。我把这个放到Google

复制链接

扫一扫

专栏目录

ASP.NET给图片自动添加水印

南 墙

04-24

1万+

先建一个类,感觉注释已经很详细了,有不懂的欢迎评论

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Imaging;

using System.IO;

using System.Linq;

using System.Web;

namespace shuiyin

{...

aspx探针aspx探针,aspx探针,,,aspx探针

12-07

aspx探针,aspx探针,,,aspx探针

2 条评论

您还未登录,请先

登录

后发表或查看评论

W3Image.Image (Dimac 的)

11-20

Dimac 公司的图像组件,2.0试用版。

试用版会在生成的图像底部写上8像素高的网址。

svg中的image标签图片平铺处理

牟云飞的博客

07-14

4407

svg中嵌入image标签后,修改image标签大小,图片并不会拉伸,

image标签中增加preserveAspectRatio="none" vector-effect="non-scaling-stroke"

ASP.Net的系统信息探针(探测器)

yyixin的专栏

11-07

1888

%@ Page Language="C#" AutoEventWireup="true" %>%@ Import Namespace="System.Runtime.InteropServices" %>%@ Import Namespace="System.IO" %>%@ Import Namespace="System.Data" %>%@ Import Namesp

老猫的理想ASP.NET探针V0.20提供下载

weixin_30906701的博客

12-21

77

//******************************************************************************

//程序名称:老猫的理想ASP.NET探针

//Version:0.20

//作者:迈克老猫

//版权所有2004-2005老猫的理想工作室.

//主页:http://www.mikecat.netEmail:mi...

ASP.NET获取服务器常用信息的方法——探针

lile0920的专栏

09-12

777

服务器启动运行时间(单位:秒);服务器IP; 服务器域名;服务器操作系统;WEB服务器版本;.NET解释引擎版本;https支持情况;HTTP访问端口;服务器当前时间;虚拟目录绝对路径;虚拟目录绝对路径;虚拟目录Session总数;检查是否支持该组件..

服务器启动运行时间(单

基于ASP.NET实现的一个简单的记账WebApp源码+数据库

最新发布

10-20

一个简单的记账WebApp。三层架构模式,Model,Dal和BLL使用动软生成。采用MySQL做数据库,ASP.NET写的后端,HTML5+CSS3+JS(mui.js)写的前端,在Linux上使用Mono+Jexus+Nginx测试成功

Mono.Cecil.dll一个非常重要的插件

07-29

Mono.Cecil.dll一个非常重要的插件

Ubuntu 下Mono环境Asp.Net的部署及问题解决方案v1.0

03-13

基于Ubuntu下Mono+Nginx环境Asp.Net的部署一条龙方案,包含问题解决办法等。 一、所需材料 Windows 10电脑 SQL Server Management Studio VMware Workstation Ubuntu 16.04 Xshell 6 Xftp

asp.net探针,aspx探针,asp探针

06-29

看到csdn上的那个asp探针竟要了10积分,所以上次一个供大家免费用,呵呵

asp.net探针程序

03-30

为达到最佳效果,推荐使用九网互联的ASP.net空间,支持ASP.net版本1.1和2.0在线切换、在线脚本映射、ASP.net具体错误信息在线查看。一个好用的.net探针程序,希望大家能够喜欢!

C# ASP.NET双向探针(查看本机和服务器) ASP.NET双向探针,既查看本机环境参数,也可查看服务器详细参数,功能强大已经超过了我的想象,运行时间也是出奇的长。功能:把原来属于服务器信息的组件信息脱离出来,并支持现在绝大部分能见到的组件检测。并且支持自定义检测,你可以检测自己想的出来的组件,反正我的想不出来了。

03-04

C# ASP.NET双向探针(查看本机和服务器)

ASP.NET双向探针,既查看本机环境参数,也可查看服务器详细参数,功能强大已经超过了我的想象,运行时间也是出奇的长。功能:把原来属于服务器信息的组件信息脱离出来,并支持现在绝大部分能见到的组件检测。并且支持自定义检测,你可以检测自己想的出来的组件,反正我的想不出来了。

ASP.NET双向探针(查看本机和服务器)

03-17

内容索引:.NET源码,控件组件,探针  双向探针,既查看本机环境参数,也可查看服务器详细参数,功能强大已经超过了我的想象,运行时间也是出奇的长。功能:把原来属于服务器信息的组件信息脱离出来,并支持现在绝大部分能见到的组件检测。并且支持自定义检测,你可以检测自己想的出来的组件,反正我的想不出来了。

.net开发的探针

06-02

.net 探针,可以部署到任何IIS系统下

C# asp.net PgSql驱动 Npgsql mono.security

03-25

asp.net C# PgSql驱动,包含了Npgsql.dll 与 mono.security。 gauss系统数据库也可用。

Mono.ASP.net.vNext:Mono.ASP.net.vNext playgorund

06-28

Mono.ASP.net.vNext Mono.ASP.net.vNext playgorund链接参考ASP.net vnext地点视窗 %USERPROFILE%\.kre%USERPROFILE%\.kpmKRE_HOME=C:\Program Files\KRE;%USERPROFILE%\.kreMac + Linux ~/.kre~/.kpm日志2014-...

警告:为了安全请不要随意将ASP.Net的validateRequest="false"

热门推荐

DanceFire的专栏

04-11

1万+

ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRequestValidationExceptioin。默认情况下会返回如下文字的页面: Server Error in /YourApplicationPath

使用XmlWriter时请注意Encoding

DanceFire的专栏

12-02

1万+

这两天用一个常用编辑的软件打开一个最近更新的xml配置文件时突然报编码错误,说不支持utf-16。看到这个错误,我愣了一下,这个软件不支持utf-16的xml我是知道的,但是这个xml配置文件可是用XmlSerializer序列化的一个class,一直都是使用utf-8编码的,怎么突然出utf-16了?用Notepad++打开这个xml,看了一下右下角的编码,显示的还是utf-8,看来文件输出没有

./euroc_examples.sh: 行 7: ./Examples/Monocular/mono_euroc: 没有那个文件或目录

07-16

您好,对于您遇到的错误信息,这可能是由于找不到文件或目录导致的。请确保您已正确安装并配置了相关的软件包和依赖项。 首先,请确认您已按照正确的步骤安装了 Euroc 数据集和相关示例代码。您可以根据官方文档或...

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

DanceFire

博客等级

码龄23年

42

原创

8

点赞

21

收藏

87

粉丝

关注

私信

热门文章

征集华人操作系统项目列表

30129

巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1-01

22382

让我们用中文编程(二)之C++篇 - 自己做中文编程语言,你也行

19866

坏了坏了,以后用/proc读取Linux系统信息可能要给联想交专利费了

18654

警告:为了安全请不要随意将ASP.Net的validateRequest="false"

18577

分类专栏

C#/Java

11篇

C++

10篇

Idea

1篇

Networking

Operating System

11篇

Security

1篇

自然语言处理

3篇

非技术

3篇

最新评论

使用XmlWriter时请注意Encoding

weixin_47327264:

感谢 16年前的文章 没想到这么有用 感谢!

让我们用中文编程(二)之C++篇 - 自己做中文编程语言,你也行

cgy091107:

这不还是c++吗?

语法你变了吗?

那您的程序和“https://blog.csdn.net/cgy091107/article/details/122857190?spm=1001.2014.3001.5502”里面的“MY.hpp”有什么区别?

编程语言的家族族谱(看看你知道的有多少)

su2merboy:

2005年到2018年这段时间我觉的有必要更新一下了,毕竟有13年了,曾经的少年大都步入中年,但却依然老当益壮嘿:)

让我们用中文编程

spku400:

哈哈 我也一直想这样干 如果类 函数 和变量都中文化 看起来更方便理解 现在看很多开源项目 各种英文简写一大串 需要花很长时间才能理解它的意思 24楼说浪费字节 其实刚好说反了 在unicode编码中一个中文字和一个英文字母都是占用2个字节 中文其实更省内存空间 你看那些稍微复杂点的英文命名 基本都超过10个字母 如果用中文表达反而更精简准确

让我们用中文编程(二)之C++篇 - 自己做中文编程语言,你也行

spku400:

哈哈 我也一直想这样干 如果类 函数 和变量都中文化 看起来更方便理解 现在看很多开源项目 各种英文简写一大串 需要花很长时间才能理解它的意思 24楼说浪费字节 其实刚好说反了 在unicode编码中一个中文字和一个英文字母都是占用2个字节 中文其实更省内存空间 你看那些稍微复杂点的英文命名 基本都超过10个字母 如果用中文表达反而更精简准确

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

也谈表达式分析和计算

让VS 2008支持Subversion

使用XmlWriter时请注意Encoding

2009年1篇

2007年9篇

2006年20篇

2005年3篇

2004年13篇

目录

目录

分类专栏

C#/Java

11篇

C++

10篇

Idea

1篇

Networking

Operating System

11篇

Security

1篇

自然语言处理

3篇

非技术

3篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

DiA (4-Di-16-ASP) 细胞膜荧光探针 - 上海懋康生物科技有限公司

DiA (4-Di-16-ASP) 细胞膜荧光探针 - 上海懋康生物科技有限公司

收藏本站    您好,欢迎光临上海懋康生物科技有限公司!

登录  |  

注册

个人中心

购物车

首页

产品中心

新闻资讯

技术服务

资料中心

关于我们

分子生物学研究

碳水化合物

DNA/RNA 纯化

RNA提取

质粒提取

基因组DNA提取

DNA分子量

分离试剂

抗生素

核酸纯化与电泳

克隆与表达分析

表观遗传学

载体及构建

免疫学

免疫印迹分析

一抗

二抗

免疫细胞组织化学分析

Western

ELISA/ELISA-Spot分析

动物模型建立

细胞生物学

细胞转染

血清

培养基

细胞增殖与凋亡

细胞分离与流式分析

细胞传代与转染

荧光探针与细胞染色

细胞增殖与凋亡

植物细胞培养

蛋白质研究

Western Bl

蛋白抽提与定量

凝胶蛋白电泳

蛋白Marker

多肽与纯化蛋白

工具酶

酶活性检测

蛋白纯化与分离

蛋白标记与连接

耗材

Corning

NEST

Axygen

merck millipore

Biorad

常用耗材

生化试剂

抗生素

核酸及衍生物

氨基酸及蛋白质

维生素及辅酶

脂糖类

激素

缓冲剂

染色剂/指示剂

表面活性剂

其他生化试剂

内毒素试剂

微生物培养

抗肿瘤化合物/免疫抑制剂

有机溶剂

信号转导研究相关

PI3K/Akt/mTOR通路

转运,外吐/内吞研究

Ca/cAMP/脂质信号通路

一氧化氮通路

模式识别受体通路/先天性免疫

细胞骨架/马达蛋白

跨膜转运体/离子通道通路

CGPCRs/G Protein

泛素-蛋白酶体途径

DNA损伤/修复

MAPK Pathway

Wnt/Hh/Notch通路

内分泌&激素

细胞代谢

其他

NF-κB通路

蛋白酪氨酸激酶

MAPK通路

最新促销

公司新闻

新品发布

行业动态

精品资讯

RNAi平台

慢病毒包装平台

分子生物学平台

细胞生物学平台

动物实验平台

一站式课题服务

技术专栏

产品专题

常见问题

公司简介

企业文化

企业优势

发展历程

联系我们

当前位置:

首页>

产品中心>

细胞生物学 >

荧光探针与细胞染色 >

DiA (4-Di-16-ASP) 细胞膜荧光探针

品牌:

全部

Sigma-Aldrich

Thermo

Merck Millipore

MKBio

Omega

Jackson

Bio-Rad

BD

eppendorf

GE Healthcare

Promega

Time saver

BioLegend

Corning

Cytoskeleton

Cayman

Equitech-Bio

Lonza

HumanZyme

Stemgent

NEST

Abways

Plantmedia

Polysciences

FD NeuroTechnologies

Hypoxyprobe

Marker Gene

Yakult.Japan

Chondrex

SERVA

Vector Laboratories

Viagen Biotech

OlChemlm

Roche

MP Biomedicals

产品分类:

全部

分子生物学研究

免疫学

细胞生物学

蛋白质研究

耗材

生化试剂

信号转导研究相关

二级分类:

全部

细胞转染

血清

培养基

细胞增殖与凋亡

细胞分离与流式分析

细胞传代与转染

荧光探针与细胞染色

细胞增殖与凋亡

植物细胞培养

DiA (4-Di-16-ASP) 细胞膜荧光探针

目录号

MX4006-25MG

售价

1313.00元

规格

25mg

运输温度

冰袋运输

其他名称

4-Di-16-ASP; 4-(4-(Dihexadecylamino)styryl)-N-methylpyridinium iodide;

保存温度

-20ºC避光干燥保存

CAS号

N/A

有效期

1年

应用

细胞膜荧光探针

订购数量

产品简介:

DiA 细胞膜荧光探针

温馨提示:见细胞膜荧光探针专题,选择您想要的最适膜标记探针。

搜索关键词:

细胞膜荧光探针,DiI,DiO,DiD,DiR,DiA,CM-DiI,神经示踪,传统细胞膜荧光探针

订购信息:

产品名称                        

产品编号             

规格            

价格(元)      

DiA 细胞膜荧光探针

MX4006-25MG

25mg

1313.00

产品描述:

DiA为亲脂性氨基苯乙烯基染料(dialkylaminostyryl

dye),扩散进入细胞膜(比DiO扩散速度快),常用于神经元的示踪。最显著的特点就是能与DiI(DiIC18(3))联合使用进行双色标记。DiA能用于甲醛固定组织染色,研究发现某些情况下当DiO不能标记固定组织时,DiA可得到良好标记。DiA水溶液中的荧光非常弱,但与磷脂双层膜结合后,光谱迁移荧光明显加强。因其发射光谱非常广,可被绿色,橙色,甚至是红色滤片检测到。

本品以DiA的碘盐形式提供,英文名:4-(4-(Dihexadecylamino)styryl)-N-methylpyridinium

iodide,纯度≥90%,适用于荧光检测研究。

基本特性:

1)同义名:4-Di-16-ASP;4-(4-(Dihexadecylamino)styryl)-N-methylpyridinium

iodide;

2)分子式:C46H79IN2

3)分子量:787.04g/mol

4)外观:红色或橙色固体

5)纯度:≥90%

6)Ex/Em:490/611nm(甲醇)

7)溶解性:溶于乙醇,DMSO,甲醇

8)推荐滤光器:Omega-XF21, Chroma-31024

9)化学结构图:

     

保存与运输方法

保存:-20ºC避光干燥保存,有效期一年。

运输:冰袋运输。

注意事项

1)荧光染料均存在淬灭问题,请尽量注意避光,以减缓荧光淬灭。

2)为了您的安全和健康,请穿实验服并戴一次性手套操作。

使用方法

【注意】以下使用方法仅用作参考,可根据具体的实验条件做出调整。

1. 染色液制备

1)储存液制备:用DMSO或乙醇配置浓度1~5 mM的储存液。例如,取25mg DiA(Mw:787.04g/mol)溶于6.35ml无水DMSO中,充分溶解,即得到5mM的储存液。【注意】未使用的储存液分装储存在-20℃,避免反复冻融,且要避光保存。

2)工作液制备:用合适的缓冲液(如:无血清培养基,HBSS或PBS)稀释储存液,调整到1~5 μM的工作浓度。【注意】工作液最终浓度需要根据不同细胞系和实验体系来优化。建议从推荐浓度开始,以10倍范围为区间进行最优浓度的摸索。

2. 悬浮细胞染色

1)加入适当体积的染色工作液重悬细胞,使其密度为1×106/mL。

2)37℃孵育细胞2~20min,不同的细胞最佳培养时间不同。可以20min作为起始孵育时间,之后优化以保证得到均一化的标记结果。

3)孵育结束,按1000~1500 rpm离心5min。

4)去除上清液,之后轻柔加入37℃预热的生长培养液重悬细胞。

5)再重复3),4)步骤两次。

3. 贴壁细胞染色

1)将贴壁细胞培养于无菌盖玻片上。

2)从培养基中移走盖玻片,滤掉过量培养液,将盖玻片放在潮湿的小室内。

3)在盖玻片的一角加入100μL的染色工作液,轻轻晃动使染料均匀覆盖所有细胞。

4)37℃孵育细胞2~20min,不同的细胞最佳培养时间不同。可以20min作为起始孵育时间,之后优化以保证得到均一化的标记结果。

5)吸掉染色工作液,用培养液洗盖玻片2~3次,每次用预温的培养基覆盖所有细胞,孵育5~10min,然后吸走培养基。 

附表 DiD,DiO,DiI,DiR和DiA光谱特征汇表

货号

荧光探针         

最大激发/最大发射波长      

(Ex/Em)

滤光片编号*

Omega公司

Chroma公司       

MX4002-10MG    

DiI

549/565nm

XF108, XF32

41002, 31002

MX4001-10MG

DiO

484/501nm

XF100,XF23           

41001, 31001

MX4004-25MG

DiD

644/663nm

XF110, XF47

41008, 31023

MX4005-5MG

DiR**

748/780nm

XF112

41009

MX4006-25MG

DiA

491/613

XF21

31024

*:滤光片编号是荧光显微镜检测的建议宽带滤片设置。

**:DiR的荧光发射肉眼不可见,必须通过CCD摄像头或其他近红外敏感检测器检测。

— —Written/Edited by V. Shallan【版权归MKBio懋康所有】

上海懋康生物科技有限公司是一家涉足于生命科学和生物技术领域研究的试剂、仪器和实验室消耗品与实验服务工作,主要从事细胞生物学、植物学、分子生物学、免疫学、生物化学、蛋白组学。生物制药与诊断试剂研发生产等领域。 本公司秉承“以人为本,以诚为信、合同守信”的经营理念。坚持"品质保障"的原则为广大客户提供优质产品。

K

首页 |

产品中心 |

新闻资讯 |

技术服务 |

资料中心 |

关于我们

电话:021-54736159    传真:021-54736159    手机:18121428569邮箱: sales@maokangbio.com

地址:上海市徐汇区龙吴路2888弄23号902室    

版权所有:上海懋康生物科技有限公司

沪ICP备16016464号-1

ASP.NET探针-获取.net服务器信息 - 泛目录 - 博客园

ASP.NET探针-获取.net服务器信息 - 泛目录 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

泛目录程序

最新泛目录程序www.fanmulu.cn

博客园

首页

新随笔

联系

订阅

管理

ASP.NET探针-获取.net服务器信息

 

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Web" %>

<%

HttpBrowserCapabilities bc = new HttpBrowserCapabilities();

bc = Request.Browser;

%>

ASP.NET探针 by www.fanmulu.cn

出现以下情况表示服务器不支持 .NET Framework:

  1. 打开文件时提示下载
  2. 无法看到具体的服务端以及客户端信息

服务器IP:<% =Request.ServerVariables["LOCAL_ADDR"] %>

服务器名:<% =Request.ServerVariables["SERVER_NAME"] %>

HTTP端口:<% =Request.ServerVariables["SERVER_PORT"] %>

服务器时间:<% =DateTime.Now %>

操作系统信息:<% =Request.ServerVariables["HTTP_USER_AGENT"] %>

允许文件:<% =Request.ServerVariables["HTTP_ACCEPT"] %>

MD目录:<% =Request.ServerVariables["APPL_MD_PATH"] %>

探针文件路径:<% =Server.MapPath(Request.ServerVariables["SCRIPT_NAME"]) %>

IIS版本:<% =Request.ServerVariables["SERVER_SOFTWARE"] %>

脚本超时时间(秒):<% =Server.ScriptTimeout%>

SLL连接:<% =Request.ServerVariables["HTTPS"] %>

CGI版本:<% =Request.ServerVariables["GATEWAY_INTERFACE"] %>

服务端语言:<% =Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"] %>

Framework版本:<%Response.Write(Environment.Version.ToString());%>

服务器系统版本:<%Response.Write(Environment.OSVersion.ToString());%>

服务器处理器个数:<%Response.Write(Environment.ProcessorCount.ToString());%>

服务器物理内存:<%Response.Write(Environment.WorkingSet.ToString());%>

浏览器类型:<% =bc.Type %>

浏览器名称:<% =bc.Browser %>

浏览器版本:<% =bc.Version %>

  主版本:<% =bc.MajorVersion %>

  次版本:<% =bc.MinorVersion %>

是否测试版本:<% =bc.Beta %>

是否客户平台:<% =bc.Platform %>

是否AOL 浏览器:<% =bc.AOL %>

是否基于Win16:<% =bc.Win16 %>

是否基于Win32:<% =bc.Win32 %>

是否支持框架:<% =bc.Frames %>

是否支持表格:<% =bc.Tables %>

是否支持Cookies:<% =bc.Cookies %>

是否支持VB Script:<% =bc.VBScript %>

是否支持JavaScript:<% =bc.JavaScript %>

是否支持Java Applets:<% =bc.JavaApplets %>

是否支持Activex Controls:<% =bc.ActiveXControls %>

是否支持CDF:<% =bc.CDF %>

是否支持背景音乐:<% =bc.BackgroundSounds %>

ECMA 脚本版本:<% =bc.EcmaScriptVersion %>

MS DOM版本:<% =bc.MSDomVersion %>

W3C DOM版本:<% =bc.W3CDomVersion %>

 

posted @

2020-09-09 08:52 

泛目录 

阅读(339) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

Copyright © 2024 泛目录

Powered by .NET 8.0 on Kubernetes

泛目录程序