Net中httpResponse和httpRequest的简单实用;
这对象很简单,封装很多常用的方法和属性;使用起来也很方便;
这个关键是要对我们的 http中的各种协议要很了解滴呀;
模拟一个简单的暴力破解:
public static class HttpInfo
{
public static void Attack()
{
string url = "";
var request=(HttpWebRequest)WebRequest.Create(url); //请求对象滴滴呀 var response = (HttpWebResponse)request.GetResponse(); //得到响应对象; Stream stream = response.GetResponseStream(); //得到这个响应流滴呀; StreamReader read = new StreamReader(stream); //流转化; string content = read.ReadToEnd(); //这样就得到我们的响应的文本信息了滴呀; } //然后这个就是我们的暴力破解的代码;
public static void VoilteFuck()
{ string url = "http://localhost:3837/Login/index";
string pre = string.Empty;
for(int i = ; i < ; i++)
{
Console.WriteLine("破解进行中...");
Thread.Sleep(); var userName = new Random(DateTime.Now.Millisecond).Next(,).ToString(); //这里要添加一个我们的seed来提
var PassWord = new Random(DateTime.Now.Millisecond).Next(,).ToString();
var PostInfo = "UserName="+userName+ "&PassWord="+ PassWord;
var bytes = Encoding.UTF8.GetBytes(PostInfo);//将我们的额content变成字节的形式;
var request = (HttpWebRequest)WebRequest.Create(url);
//根据fidller中看到的信息,我们可以模拟追加这样的信息;
request.Method = WebRequestMethods.Http.Post;
request.Timeout = * ;
request.AllowAutoRedirect = true;
request.ContentLength = bytes.Length;
request.ContentType = "application/x-www-form-urlencoded"; //将我们的content写入post请求;
var stream = request.GetRequestStream();
stream.Write(bytes,,bytes.Length);
stream.Close(); var response = (HttpWebResponse)request.GetResponse(); //然后成功的写入到我们的响应流中滴呀; //获取请求的值;
var sr = new StreamReader(response.GetResponseStream());
var currentContext = sr.ReadToEnd();
if (string.IsNullOrEmpty(pre))
{
pre = currentContext;
}else
{
if (pre != currentContext) //这种判断是不太精确的,应为;mvc中有一个EnableBrowserLink,想page中插入随机js代码;所以,算了,这只是一个简单的模拟;
{
Console.WriteLine("第{0}次之后,破解成功,破解成功,破解成功,账户是:{1},密码是:{2}", i,userName, PassWord);
break;
}
else
{
Console.WriteLine("第{0}次,账户是:{1},密码是:{2}", i, userName, PassWord);
}
}
}
Console.WriteLine("尝试完毕!"); } }
}
上面是向我们的service端不断的post提交东西,接下来我们尝试从service download一些信息;
先尝试我们的额单线程模式
//通过http,开启多个线程,来下载我们想要额基本东西滴呀;
public static class DownInfo
{
//这个是学习http的一个很好的实例滴呀;
//每个线程下载的字节数,方便我们最后的合并滴啊
public static ConcurrentDictionary<long, byte[]> dic = new ConcurrentDictionary<long, byte[]>(); // http://imgsrc.baidu.com/baike/pic/item/dc854fda6c02ee8db7fd4805.jpg
public static string ResourceUrl = "http://www.pncity.net/bbs/data/attachment/forum/201107/30/1901108yyd8gnrs2isadrr.jpg"; //启用单线程的方式来进行下载
public static void RunSingle()
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.Write("下载开始......");
if (GetHead() == )
{
return;
}
var request = (HttpWebRequest)HttpWebRequest.Create(ResourceUrl); var response = (HttpWebResponse)request.GetResponse(); var stream = response.GetResponseStream();//得到我们额响应流滴呀 var MStream = new MemoryStream(); //这使用我们的内存流滴呀; var bytes = new byte[]; int count = ; while((count=stream.Read(bytes,,bytes.Length))!=)
{
MStream.Write(bytes,,count); //写入到我们的内存流中滴呀;
} //然后存到我们的本地中;
var name = ResourceUrl.Substring(ResourceUrl.LastIndexOf('/') + );
var target = @"F:\\xiandao_person\\"+name;
FileStream fs = new FileStream(target,FileMode.Create,FileAccess.ReadWrite);//其他信息: 对路径“F:\xiandao_person”的访问被拒绝。(没有添加文件名导致的,就是我们的name滴呀;)
fs.Write(MStream.ToArray(),,(int)MStream.Length);
MStream.Close();
response.Close();
watch.Stop();
Console.WriteLine("下载结束,单线程下载耗时:{0}",watch.Elapsed);
//好的,这下我们的图片下载就基本结束了, }
//获取响应头的信息滴呀;
private static long GetHead()
{
var request = HttpWebRequest.Create(ResourceUrl);
request.Method = "Head";
request.Timeout = ; var response =(HttpWebResponse)request.GetResponse();
var code = response.StatusCode;
if (code != HttpStatusCode.OK)
{
Console.WriteLine("下载资源无效!");
return ;
}
var total = response.ContentLength;
Console.WriteLine("当前资源大小为:"+total);
response.Close();
return total;
} //顺便复习一下常见流的操作滴呀;
private static void Read()
{
string url = @"";
FileStream fs = new FileStream(url,FileMode.Open,FileAccess.Read);
byte[] by = new byte[fs.Length];
fs.Read(by,,(int)fs.Length);//将我们的数据读入我们的by字节数组中滴呀;
}
//文件的写入操作的啊;
private static void Write(string val)
{
byte[] buffer = Convert.FromBase64String(val);
string path = @"";
FileStream fs = new FileStream(path,FileMode.Create);
fs.Write(buffer,,buffer.Length);
fs.Flush();
fs.Close();
} }
接下来就来尝试我们的多线程模式滴 ;
//后面我们考虑,使用并发编程来进行下载的呀,同样提高效率滴呀;不,并发编更多的是用在本地计算中的;
//多线程来进行请求,然后拼接在一起,这个是一个很不错的实例和使用方式滴呀;,效果很不错
public static CountdownEvent cde = new CountdownEvent(0);
public static ConcurrentDictionary<long, byte[]> dic = new ConcurrentDictionary<long, byte[]>();
public static string ResourceUrl = "http://www.pncity.net/bbs/data/attachment/forum/201107/30/1901108yyd8gnrs2isadrr.jpg"
public static void RunMultiTask()
{
Stopwatch watch = Stopwatch.StartNew();
Console.Write("下载开始......");
int threadCount = ;
long start = ;
long end = ;
var total = GetHead();
if (total == ) { return; } int pageSize = (int)Math.Ceiling((double)total / threadCount);//“每一页”的大小
cde.Reset(threadCount);
Task[] task = new Task[threadCount]; for(var i = ; i < threadCount; i++)
{
start = i * pageSize;
end = (i + ) * pageSize - ; //因为,小标是从0开始的,所以这里要减去一滴呀;
if (end > total)
end = total;
var obj = start + "|" + end;
task[i] = Task.Factory.StartNew(j=> DownTaskMulti(obj),obj);
}
Task.WaitAll(task);
var name = ResourceUrl.Substring(ResourceUrl.LastIndexOf('/')+);
var path = @"F:\\xiandao_person\\" + name;
FileStream fs = new FileStream(path,FileMode.Create,FileAccess.ReadWrite);
var result = dic.Keys.OrderBy(i=>i).ToList(); //保证顺序滴啊;
foreach(var item in result)
{
fs.Write(dic[item],,dic[item].Length); //写入到本地中;
}
fs.Close();
watch.Stop();
Console.WriteLine("下载结束,启动{0}个线程,耗时{1}", threadCount,watch.Elapsed);
} /// <summary>
/// 多线程来进行请求,然后拼接在一起,这个是一个很不错的实例和使用方式滴呀;,效果很不错
/// </summary>
/// <param name="obj"></param>
private static void DownTaskMulti(object obj)
{
var single = obj.ToString().Split('|');
long start = Convert.ToInt64(single.FirstOrDefault());
long end = Convert.ToInt64(single.LastOrDefault()); var request = (HttpWebRequest)HttpWebRequest.Create(ResourceUrl);
request.AddRange(start, end); //每次仅仅请求获取制定位置的数据滴呀;,这样的效果还是挺不错滴呀;
//向请求添加指定范围的字节范围标头。
//
// 参数:
// from:
// 开始发送数据的位置。
//
// to:
// 停止发送数据的位置 var response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
var ms = new MemoryStream();
var bytes = new byte[]; //每次取出这么多个字节
int count = ;
while ((count=stream.Read(bytes,,bytes.Length))!=)
{
ms.Write(bytes,,count); //写入我们的额内存流中;
}
ms.Close();
response.Close();
dic.TryAdd(start,ms.ToArray());
cde.Signal(); }
这里有个Task的使用和我们CountdownEvent 的使用滴呀;这个要注意复习和使用滴呀;
这里还要注意复习和了解我们http相关协议的各种知识滴呀;
Net中httpResponse和httpRequest的简单实用;的更多相关文章
- Java中的Math类的简单实用
System.out.println(Math.PI);//获取PI的值 System.out.println(Math.E);//常量E int min = Math.min(5, 4);//求最小 ...
- ci中简单实用的权限管理
实用的权限管理 对多数网站来说,使用完整的rbac权限管理杀鸡用牛刀绝对的吃力不讨好,因为我们只是简单分角色然后对角色进行管理行使其相对于的角色赋予的权限; 在实际的开发中用位运算来对权限进行验证是十 ...
- 最简单实用的JQuery实现banner图中的text打字动画效果!!!
下面,就让小博详细介绍如何实现上面GIF实现的banner图中的文字动画效果,最简单实用的方法(鉴于代码量较小,就内嵌在一个HTML文件中了): 首先,我们要在header导入一个jQuery,并新建 ...
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
C#反射实现 一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...
- jQuery的几种简单实用效果
许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...
- 经验分享:10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...
- 简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注 ...
- php简单实用的操作文件工具类(创建、移动、复制、删除)
php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) { // 原目录,复制到的目录 $dir = opend ...
- 简单实用的Windows命令(一)
前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...
随机推荐
- thinkphp中volist标签
volist标签 volist标签主要用于在模板中循环输出数据集或者多维数组 volist(name,id,offset,length,key,mod,empty) name(必须):要输出的数据模型 ...
- Linux TOP 交互命令
今天总结一点top命令的一些交互命令,比较实用! h或者? 显示帮助画面,给出一些简短的命令总结说明 k 终止一个进程. 系统将提示用户输 ...
- RSA的傻瓜原理
设想一下,这种场景,你处在一个狭小的房间里,房间之中有一共有三个人,你是其中一个,你们之间被玻璃隔开,两两对视,现在给另外两个人起个名字叫小红.小明.你和他们通讯只能用写字板来展示给对方(简单起见,只 ...
- java中的权限修饰符的理解
首先了解概念: 在java中有四种权限修饰符:范围从大到小分别是:public.protect.default(friendly).private,它们之间的区别是: public: Java语言中访 ...
- ubuntu下安装myeclipse 并设置快捷键
官网下载:http://www.myeclipseide.com/ 安装myeclipse ctrl+alt+t打开终端,切换到myeclipse所在路径: -$ cd 下载/ 设置myeclipse ...
- Can't find PHP headers in /usr/include/php
解决办法: yum install php-devel
- win10休眠选项在哪里设置?如何设置?
本人以前安装的Win7也是碰到这个问题 http://www.jb51.net/os/win10/373383.html 查询.打开休眠命令 1.右键开始菜单,选择命令提示符(管理员) 或 win+R ...
- Official online document, install svn server in centOS
http://www.krizna.com/centos/install-svn-server-on-centos-6/
- uva12546. LCM Pair Sum
uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...
- 【Unity3d游戏开发】unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(转载)
此文为转载,因为最近在做U3D,有一些概念弄得不是很清楚,看到这篇博客讲的不错,就转载过来了,方便自己随时查看. ------------------------------------------- ...