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:在 ...
随机推荐
- python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹
python系列均基于python3.4环境 1.位置传递和关键字传递 代码示例 #位置传递 def fun(a,b,c): print("a: {0}, b: {1}, c: {2}&qu ...
- vagrant安装及使用方法
http://www.chenjie.info/1757 http://blog.csdn.net/zsl10/article/category/6324870 --以下转自MaxWellDuva ...
- JAVA中static关键字
用法:是一个修饰符,用于修饰成员(成员变量,成员函数),不能用于修饰局部变量!被static修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用,写法格式是:类名.静态成员.优点:被 ...
- 利用python的双向队列(Deque)数据结构实现回文检测的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...
- BZOJ 1455 罗马游戏 ——左偏树
[题目分析] 左偏树的模板题目,大概就是尽量维护树的深度保持平衡,以及尽可能的快速合并的一种堆. 感觉和启发式合并基本相同. 其实并没有快很多. 本人的左偏树代码自带大常数,借鉴请慎重 [代码] #i ...
- MySQL 存储过程控制语句
变量作用域内部的变量在其作用域范围内享有更高的优先权,当执行到end.变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储过程外再也不能找到这个申明的变量,但是你可以通过out参数或 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- JSON和JSONP (含jQuery实例)(share)
来源:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两个问 ...
- 【BZOJ】3521: [Poi2014]Salad Bar
题意 长度为\(n(1 \le n \le 1000000)\)的\(01\)字符串.找一个最长的连续子串\(S\),使得不管是从左往右还是从右往左取,都保证每时每刻已取出的\(1\)的个数不小于\( ...
- php递归获取顶级父类id
php递归获取顶级父类id function get_top_parentid($id){ $r = M('navclass')->where('id = '.$id)->field('i ...