如何使用c websockett

websocket 使用java编写的网络套接字封装类,可以直接在程序中调用,功能比较基础。 Develop 182万源代码下载-
&文件名称: websocket
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 17 KB
&&上传时间:
&&下载次数: 5
&&提 供 者:
&详细说明:使用java编写的网络套接字封装类,可以直接在程序中调用,功能比较基础。-Written in Java network socket wrapper class can be invoked directly in the program, the functional basis for comparison.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&websocket\src\com\jason\sockect\concurrent\ProcessWorker.java&&.........\...\...\.....\.......\..........\RequestWorker.java&&.........\...\...\.....\.......\..........\ResponseWorker.java&&.........\...\...\.....\.......\..........\SockectServer.java&&.........\...\...\.....\.......\..........\Socketer.java&&.........\...\...\.....\.......\..........\stock\Stock.java&&.........\...\...\.....\.......\..........\.....\StockSpider.java&&.........\...\...\.....\.......\..........\Utf8Coder.java&&.........\...\readme.txt&&.........\...\stock.html&&.........\...\stock.properties&&.........\...\com\jason\sockect\concurrent\stock&&.........\...\...\.....\.......\concurrent&&.........\...\...\.....\sockect&&.........\...\...\jason&&.........\...\com&&.........\src&&websocket
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:SuperSocket框架学习笔记4-SuperWebSocket使用自定义的SubCommandBase命令加载器 - 林梦U3dUpUpUp - 推酷
SuperSocket框架学习笔记4-SuperWebSocket使用自定义的SubCommandBase命令加载器 - 林梦U3dUpUpUp
首先下载所需要的 DLL
或者参见第2章& 到SuperSocket官网下载
1,新建一个 .NET4.0 控制台应用程序 命名为 DiyServers
添加以下引用
将默认的Program.cs改名为& DiyServers.cs
并添加以下命名空间
2,写自己的DSession和DServer继承自 《&WebSocketSession& 和 WebSocketServer 》
新建两个class文件 分别命名&& DSession和DServer
并都 添加以下命名空间
首先在 DSession中 添加 父类继承
public class DSession : WebSocketSession&DSession&
再添加以下代码
using System.Collections.G
using System.L
using System.T
using SuperWebSocket.SubP
using System.R
using SuperWebS
using SuperSocket.SocketB
namespace DiyServer
public class DSession : WebSocketSession&DSession&
public string Name { get; private set; }
protected override void OnSessionStarted()
//Read name from path
var name = P
if (string.IsNullOrEmpty(name))
name = &Anoy&;
name = Path.TrimStart('/');
Console.WriteLine(&有新用户连接到服务器了&+ this.SessionID);
this.Send(&Welcome to DiySuperWebSocket&);
protected override void OnSessionClosed(CloseReason reason)
Console.WriteLine(&客户端断开了连接&);
//add your business operations
再到 DServer中& 添加父类继承 【注意后面的泛型参数 为上面定义的 客户端连接类 DSession】
public class DServer : WebSocketServer&DSession&
DServer中内容暂时可以不用写太多,具体后期可以添加功能
完整代码如下
using System.Collections.G
using System.L
using System.T
using SuperWebSocket.SubP
using System.R
using SuperWebS
namespace DiyServer
public class DServer : WebSocketServer&DSession&
public DServer()
3,添加处理类 ADD& 和 SUB ,并继承自SubCommandBase&xxSession&
添加两个Class文件,分别命名 ADD.cs 和 SUB.cs&
【特别注意参数为 SubCommandBase&
&,我在这里纠结了好久】
ADD.cs代码
using System.Collections.G
using System.L
using System.T
using System.R
using SuperWebSocket.SubP
namespace DiyServer
public class ADD : SubCommandBase&DSession&
public override void ExecuteCommand(DSession session, SubRequestInfo requestInfo)
var paramArray = requestInfo.Body.Split('#');
session.Send(
&ADD 返回数值Function Bakc:& +
int.Parse(
paramArray[0].ToString()
int.Parse(
paramArray[1].ToString()
).ToString()
Console.WriteLine(&GetADDCommand&);
SUB.cs代码
using System.Collections.G
using System.L
using System.T
using System.R
using SuperWebSocket.SubP
namespace DiyServer
public class SUB : SubCommandBase&DSession&
public override void ExecuteCommand(DSession session, SubRequestInfo requestInfo)
var paramArray = requestInfo.Body.Split('#');
session.Send(&SUB Function Bakc:& +
int.Parse(
paramArray[0].ToString() )
int.Parse(
paramArray[1].ToString() )
).ToString()
Console.WriteLine(&GetSUBCommand&);
4,添加系统 Config文件 ,并添加commandAssemblies 节点
从 SuperWebSocket.Source源码里面
将App.config 复制到& 本项目根目录下,并右键项目,选择添加现有项
然后在VS2012中打开这个App.config文件
在server [非servers]节点中 添加以下节点
其它的节点暂时还不知道具体什么意思,望大家指点,我这里就没有变动,就是添加了
commandAssemblies这个节点
完整 App.config代码如下 :
&?xml version=&1.0& encoding=&utf-8& ?&
&configuration&
&configSections&
&section name=&superSocket& type=&SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine&/&
&/configSections&
&appSettings&
&add key=&ServiceName& value=&SuperWebSocket&/&
&/appSettings&
&superSocket&
&server name=&SuperWebSocket&
serverTypeName=&SuperWebSocket&
ip=&Any& port=&2013&&
&commandAssemblies&
&add assembly=&BasicModules&&&/add&
&/commandAssemblies&
&/servers&
&serverTypes&
&add name=&SuperWebSocket&
type=&SuperWebSocket.WebSocketServer, SuperWebSocket& /&
&/serverTypes&
&/superSocket&
&/configuration&
5,开始服务端DiyServers.cs 主程序编程
完整代码如下:
using System.Collections.G
using System.L
using System.T
using SuperWebS
using SuperWebSocket.SubP
using System.R
using SuperSocket.SocketB
using SuperSocket.SocketBase.C
namespace DiyServer
public class DiyServers
static void Main(string[] args)
Console.WriteLine(&SuperWebSocket.DiyServer服务器\n 请按一下任意键启动服务器!&);
Console.ReadKey();
Console.WriteLine();
//声明自己的WebSocketServer类
var appServer = new DServer();
var serConfig = new ServerConfig();
serConfig.Port = 2012;
//设置编码类型,默认的我试过了,Unity3D无法识别中文
serConfig.TextEncoding = &GB2312&;
//Setup the appServer
if (!appServer.Setup(serConfig )) //Setup with listening port
Console.WriteLine(&初始化失败!&);
Console.ReadKey();
Console.WriteLine();
//Try to start the appServer
if (!appServer.Start())
Console.WriteLine(&服务器启动失败!&);
Console.ReadKey();
Console.WriteLine(&服务器启动成功, 按 'q' 退出服务器!&);
while (Console.ReadKey().KeyChar != 'q')
Console.WriteLine(&客户端数:&+ appServer.SessionCount );
Console.ReadKey();
//停止服务器 the appServer
appServer.Stop();
Console.WriteLine();
Console.WriteLine(&The server was stopped!&);
Console.ReadKey();
注释很清楚了 不再多说
6,更新添加 笔记3下的 Unity客户端 发送 ADD 和 SUB 指令代码
Unity3D客户端 搭建具体参考 【注意Unity最高支持.Net3.5】&
我这个版本稍有变动
在 OnGUI()函数里添加两个 按钮 分别 发送ADD 指令 和 SUB指令
注意发送内部 字符串和参数之间有一个空?格
【为了看起来直观,用一个问号占位,实际中没有】
&ADD?5#6&&
&SUB?26#1&
&客户端 完整代码如下
注意Unity3D类名需要和文件名完全一致,并且不得使用中文路径,请注意
sSCilents.cs
using UnityE
using System.C
using System.T
using System.N
using SuperSocket.ClientE
using WebSocket4N
using System.T
public class sSCilents : MonoBehaviour {
public WebSocket myC
public string M
Thread UnityT
void Awake()
Mgs =&ServerBackData&;
Application.runInBackground = true;
void OnGUI()
if(GUILayout.Button(&Connected&) )
UnityThread = new Thread(new ThreadStart(StatUnityClient ) );
UnityThread.Start();
Mgs = GUI.TextField( new Rect(120,0,200,50), Mgs );
if(GUILayout.Button(&Sends ADD&) )
myClient.Send( &ADD 5#6&
Debug.Log( &Send SUB OK& );
if(GUILayout.Button(&Send SUB&) )
myClient.Send( &SUB 26#1&
Debug.Log( &Send SUB OK& );
public void StatUnityClient()
myClient = new
WebSocket( &ws://127.0.0.1:2012&);
myClient.Opened += OnC
myClient.DataReceived +=OnDataR
myClient.MessageReceived += OnMessageR
myClient.Open();
public void OnConnectedss(object sender, EventArgs e )
myClient.Send(&Hello World!&);
Debug.Log(&NewConnected To Server OKOK&);
public void OnDataReceivedss(object sender, DataReceivedEventArgs e )
Debug.Log(
Encoding.GetEncoding(&gb2312&).GetString( e.Data ) );
Mgs = Encoding.GetEncoding(&gb2312&).GetString( e.Data );
Debug.Log(&NewDataRevcei &);
public void OnMessageReceivedss(object sender, MessageReceivedEventArgs e )
Debug.Log(
public void OnApplicationQuit()
myClient.Close();
myClient = null;
UnityThread.Abort();
UnityThread = null;
7,测试测试Let‘s GOGOGO,见证奇迹的时候到了,嘿嘿!
先启动服务器这边 ,如图 说明服务器启动成功
再启动Unity3D客户端
先点击 Connected , 点击左下角
弹出控制台 或者 点击上面的Windows--&Console
再分别点击 Sends ADD 和 Send SUB按钮
出现如图 数据,恭喜SuperWebSocket服务器自定义SubCommandBase命令加载器
搭建成功!嘿嘿嘿!
未完,待续......敬请期待
本人C#菜鸟,很多还没有研究透,代码写的渣渣,请勿扔鸡蛋,嘿嘿嘿!
我的小站:
SuperSocket官方QQ群:
欢迎大家来一起研究开发这个Socket框架!
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见您所在的位置: &
如何全面掌控session?且看WebSocket跨站劫持
如何全面掌控session?且看WebSocket跨站劫持
WebSockets是一个能够给单TCP连接提供全双工信道的HTML5特性。它的持续性连接功能,使得构建B/S模式的实时应用成为可能。Websockets常常用在那些带有聊天功能的WEB应用上。
WebSockets是一个能够给单TCP连接提供全双工信道的HTML5特性。它的持续性连接功能,使得构建B/S模式的实时应用成为可能。Websockets常常用在那些带有聊天功能的WEB应用上。
下面的图片就非常贴切地阐释了一个APT攻击用到的websockets:
同源策略(Same origin policy):同源是指,域名,协议,端口相同,即浏览器会检查同一浏览器的不同选项卡中,来源相同的脚本才能跨选项卡执行。
Origin字段:浏览器在发送POST请求的时候可能会加上一个Origin字段,这个Origin字段主要是用来标识出最初请求是从哪里发起的。如果浏览器不能确定源在哪里,那么在发送的请求里面Origin字段的值就为空。
IronWASP:某开源WEB测试平台,用户可以自定义安全扫描,并且可以自己用python/ruby来定义插件系统。相关介绍见:/tools/32948.html
ZAP(Zed Attack Proxy):是一款集成各种工具的渗透测试框架,可以发现在WEB应用程序中的漏洞,相关介绍见:/tools/5427.html
WebSocket的安全评估
最近,我们对一个拥有复杂菜单选项和功能的WEB应用做了安全评估。该应用中大部分操作都用到了web-sockets,这意味着其大多数行为都不会记录到http代理日志上。
首先,我们打开主页后,网站会加载一个带有JS脚本和CSS文件的静态网页。此后,整个通信交互会转为Websockets模式,浏览器和服务端之间会建立websocket连接,从而加载网站里所有可见的HTML资源。点击链接或者提交Form表单时,浏览器会向服务端发送一些WebSocket消息。服务器处理了这些消息后,会通过WebSocket进行反馈,而后客户端浏览器会展示新的HTML内容。
这时当websocket消息在进行交互时,通信数量是非常巨大的。每隔一秒它们之间会有心跳探测包的交互。然而现有的工具达不到我的要求,我不得不给IronWASP添加了一个Websocket消息分析装置和一个WebSocket客户端,这样它才能识别Websocket从而尝试fuzz其漏洞。你可以在在这里了解下相关知识。
在测试这个应用时,我发现它存在WebSocket跨站劫持(Cross-Site WebSocket Hijacking)漏洞(由christian schneider首创)。当然,我会在给大家介绍测试方法之前,解释下这个漏洞的影响。在测试相关Websockets应用之前,我们需要先做下准备。
WebSocket跨站劫持漏洞实验准备
大家应该明白,同源策略(SOP)不会通过浏览器在websockets上强制执行(同一浏览器下,受SSL保护的页面,不会让非SSL的WebSocket通过),我们测试的应用采用了http cookie作为session认证,WebSocket通过浏览器发送的消息不会有Session ID或是随机参数。
这样一来,如果某用户登录了带有漏洞的WEB应用,然后在同一浏览器还打开了(攻击者的网站),可以尝试通过该漏洞应用与应用的服务端建立一个WebSocket连接,然后通过浏览器发送一个带有效的认证Session ID的请求包。于是,这个由攻击者网站建立的WebSocket连接会和应用本身有相同的权限。
由于整个应用都是以websockets为基础运行的,劫持了WebSocket就相当于劫持了用户的session。所以这个漏洞在本质上和存储型跨站脚本漏洞是一样的。
如果你认为这就很糟了,那当你听到某些情况下WebSocket跨站脚本,甚至可以在用户系统上实现远程代码执行的时候,会不会更惊讶呢?事见IPython Notebook的案例。
测试之前,你首先要做的就是确认该应用是否存在WebSockets。幸运的是,做这个非常简单,你只需要知道以下三点:
1.WebSocket的URL连接一般是以ws://或者wss://开头的。
2.需要检测建立连接的Origin头,该网页可能是通过Origin字段建立的WebSocket链接。
3.浏览器和服务端之间发送的消息中,我们可以从中检查出普通WebSocket连接的特征。
下面这张图会给你展示:如何通过IronWASP日志得到Origin字段的值和WebSocket的URL值。
一旦你得到这些信息,你可以使用一些特殊方法,对跨站WebSocket劫持漏洞进行检测。我在这里例举三个简单的例子:
使用代理软件(如Burpsuite):
这里必须提到的是,burpsuite可以捕获和记录WebSockets的消息。而ZAP和IronWASP是我所知道的,可以重放websocket请求的软件。
在burpsuite里,我们不能重放websockets消息,但我们还是可以在有限条件下,检测WebSocket握手包是否成功。为了进行测试,我们需要分析websocket的升级请求包:它们会通过http或者https发送,因此可以被重放。
以下截图为burpsuite重放器(Repeat选项卡)的记录,其显示了websocket连接的有效请求和应答情况:
为了测试这个漏洞,我们需要发送另一个带有重制后的Origin头的请求包。如果我们回应包里有&101 Web Socket Protocol Handshake&的标志,这就表示WebSocket已经建立成功了。
如果连接没有建立成功,那就意味着该应用不存在这个漏洞,因为它会拒绝外部的WebSocket连接。建立成功后,我们就可以开始下一步测试,看看该应用是否有WebSocket跨站劫持漏洞。这里需要说明一下:即使已经建立连接,也需要其如Origin的正常连接一般,确认得到服务端对WebSocket消息的应答之后,才能证明该应用存在漏洞。这是因为开发者可能会同时启用Origin检测与连接权限认证。因此我们的实验中也许会出下面这种情况:建立的连接可以一直保持,但拥有外部来源的Origins不会通过认证。
ZAP可以重放WebSocket消息,但据我了解,它并不能更改Origin头。下面介绍的方法可以给你科普下,如何通过CSWSH(WebSocket跨站劫持)来获得更多的东西。
使用WebSocket跨站劫持的在线测试工具
打开需要测试的WEB应用登入其中,然后在同一浏览器中开一个新选项卡,访问http://ironwasp.org/cswsh.html(模拟的黑客网站),输入该WebSocket的URL地址,然后点击网页上的Connect按钮。一旦建立连接,你就可以通过这个页面向WebSocket的服务器发送消息。我们需要通过重放有效session发送过的消息,然后查看服务器的回应包。
如果服务端的回应与前面有效session发送的正常包相同,那就说明该应用可能存在WebSocket跨站劫持漏洞。
使用IronWASP
IronWASP可以做到更多,即使是最基础的检测也能提供自动化脚本检查。
使用IronWASP的WebSocket客户端
以上测试Origin的方法的使用的服务端是http://ironwasp.org,如果你想要更加灵活地设置Origin值,你可以使用IronWASP的客户端功能。它允许你自定义Origin值来测试WebSocket连接。
在以下环境下可能会用到客户端功能:
1.应用允许来自开放的Origin的WebSocket连接
2.应用允许来自localhost和内网IP的Origin字段值
这种做法是为了方便开发者和应用的内部测试。通过使用IronWASP的客户端,你可以尝试内网IP或者localhost作为Origin是否能够生效。如果可以的话,那没准儿你可以耍一点小手段,在真实环境下利用这个漏洞。比如,如果某个应用允许http:/127.0.0.1:8080作为Origin字段,那我们就可以这样做:若受害者正好有个在本地8080端口运行的WEB应用,而且其存在跨站脚本漏洞。如果满足这些条件,黑客可以先在该WEB应用上进行跨站攻击,然后再向目标应用服务端建立WebSocket连接:
使用IronWASP的WebSocket API进行自动化检测
如果你需要利用localhost或者内网IP进行测试Origin头,使用客户端脚本进行自动化检测会让你的行动更加轻松。IronWASP允许你使用Python或者Ruby进行实现自定义脚本编写。
下面这个脚本可以单独检测Origin头里填充的内网IP地址,测试服务端对此是否认可:
import clr
clr.AddReference(&WebsocketClient.exe&)
from WebsocketClient import *
def check_conn(origin):
print &Testing origin - & + origin
ws = SyncWebsockClient()
ws.Connect(&ws:///ws&, origin, &SessionID=KSDI2923EWE9DJSDS01212&)
ws.Send(&first message to send&)
msg = ws.Read()
ws.Close()
if msg == &message that is part of valid session&:
print &Connection successful!!&
return True
return False
def check_nw():
for nws in [&192.168.0.0/16&, &172.16.0.0/12&, &10.0.0.0/8&]:
for ip in Tools.NwToIp(nws):
if check_conn(&http://& + ip):
check_nw()
原文地址:/blog//how-cross-site-websocket-hijacking-could-lead-to-full-session-compromise/【责任编辑: TEL:(010)】
关于&&&&的更多文章
继“心脏流血”漏洞之后,安全研究专家又在Linux系统中广泛使用
第二代防火墙标准发布会将解决用户关心的三大问题……
讲师: 14371人学习过讲师: 7093人学习过讲师: 3336人学习过
纽约时报报道, 加州的一所研究机构Palo Alto Networks
目前,针对无线网络的攻击很严重,无线网络安全事件频
随着Web2.0时代的到来,用户的许多业务均以Web形式开
本书分为8章,首先介绍ASP.NET的开发技巧和重点技术,尤其针对初学者如何快速入门并掌握ASP.NET编程做了深入浅出的介绍;然后重
51CTO旗下网站}

我要回帖

更多关于 c websocket 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信