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:在 ...
随机推荐
- AngularJS介绍
AngularJS介绍–AngularJS的前世今生 AngularJS是什么 在Web开发领域,我们一般使用HTML作为前端页面元素的声明式语言,使用CSS技术作为展示样式的描述语言,JavaScr ...
- Designing IP-Based Video Conferencing Systems: Dealing with Lip Synchronization(唇音同步)
转自:http://www.ciscopress.com/articles/article.asp?p=705533&seqNum=6 Correlating Timebases Using ...
- Android版:验证手机号码的正则表达式 (转)
/** * 验证手机格式 */ public static boolean isMobileNO(String mobiles) { /* 移动:134.135.136.137 ...
- freemarker内置函数和用法
原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...
- WebForm控件Repeater
我们会发现用拼接字符串来显示一个查询非常的麻烦,有一个控件Repeater帮助你,省去写Foreach LinQ to SQL类 函数类: using System; using System.Col ...
- BZOJ 2460 [BeiJing2011]元素 ——线性基
[题目分析] 线性基,由于最多有63个,只需要排序之后,动态的去维护线性基即可. [代码] #include <cstdio> #include <cstring> #incl ...
- WPF设置DataGrid行内容高度自适应 与 TextBox/TextBlock内容高度自适应
WPF设置DataGrid行内容高度自适应 TextBox/TextBlock内容高度自适应 参考: DataGrid 控件中的调整大小选项: http://msdn.microsoft.com/ ...
- sqoop部署
下载安装包 sqoop-1.99.3-bin-hadoop200.tar.gz 解压 tar zxvf sqoop-1.99.3-bin-hadoop200.tar.gz 建立sqoop链接 ln - ...
- NOI 题库 6264
6264 走出迷宫 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的 ...
- ZeroMQ接口函数之 :zmq_ctx_shutdown - 停止一个ZMQ context
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_shutdown zmq_ctx_shutdown(3) ØMQ Manual - ØMQ/4.1.0 N ...