C# 如何获取远程服务器用户的信息?

问题描述

请教各位大牛,想开发一个winform项目放在服务器上,请问下如何获取远程连接服务器用户的ip地址,用户的电脑名称和登陆服务器的用户名。知道一种办法是读取windows安全日志,但是想通过监控3389端口获取不知道可不可以?怎么样实现呢

解决方案

解决方案二:
没有评论
解决方案三:
可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求
解决方案四:
引用2楼Z65443344的回复:

可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求

是通过udp来抓取数据包吗?
解决方案五:
你的winform程序想放到人家服务器上后,就去黑人家的windows的“远程桌面”系统?先别玩儿这种东西。先学学怎么开发windowservice其实对于学生来说更实际。
解决方案六:
引用3楼Cai_Ethan的回复:

Quote: 引用2楼Z65443344的回复:
可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求

是通过udp来抓取数据包吗?

通过#!@$%#*&。
解决方案七:
引用4楼sp1234的回复:

你的winform程序想放到人家服务器上后,就去黑人家的windows的“远程桌面”系统?先别玩儿这种东西。先学学怎么开发windowservice其实对于学生来说更实际。

不是你想的这样。是要监控自己的服务器,要及时了解到远程服务器登陆的情况。
解决方案八:
引用5楼sp1234的回复:

Quote: 引用3楼Cai_Ethan的回复:
Quote: 引用2楼Z65443344的回复:
可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求

是通过udp来抓取数据包吗?

通过#!@$%#*&。

引用5楼sp1234的回复:

Quote: 引用3楼Cai_Ethan的回复:
Quote: 引用2楼Z65443344的回复:
可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求

是通过udp来抓取数据包吗?

通过#!@$%#*&。

这。。。。
解决方案九:
引用3楼Cai_Ethan的回复:

Quote: 引用2楼Z65443344的回复:
可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求

是通过udp来抓取数据包吗?

知道什么叫抓网卡数据包吗网卡数据包类型多了,TCP的,UDP的,ICMP的你要直接访问网卡去抓取,而不是用上层的协议等别人把数据发到你的UDP端口上去我觉得你连许多基本的常识还没理清楚,还是不要研究高大上的东西比较好
解决方案十:
引用8楼Z65443344的回复:

Quote: 引用3楼Cai_Ethan的回复:
Quote: 引用2楼Z65443344的回复:
可以,不过需要自己抓网卡数据包,而且数据包里只有IP是可以直接获取的要知道电脑名称,你就需要通过IP去访问对方电脑,要知道登陆用户名,你就需要对数据包解析,然后分析里面的请求

是通过udp来抓取数据包吗?

知道什么叫抓网卡数据包吗网卡数据包类型多了,TCP的,UDP的,ICMP的你要直接访问网卡去抓取,而不是用上层的协议等别人把数据发到你的UDP端口上去我觉得你连许多基本的常识还没理清楚,还是不要研究高大上的东西比较好

打击了,不过确实是第一次听说抓网卡数据包这东西,是领导交代的任务要弄一个监控远程服务器登陆的用户信息,所以不懂就发帖来请教了。这不是不懂就要问嘛。。。
解决方案十一:
你可以直接搜:局域网抓包工具或者搜:科来数据包生成器看看人家是如何抓包的当然,他们只负责抓包,并不帮你解析包里到底是什么内容你只能看到一堆16进制数,代表什么意思需要你知道通信协议才行
解决方案十二:
引用10楼Z65443344的回复:

你可以直接搜:局域网抓包工具或者搜:科来数据包生成器看看人家是如何抓包的当然,他们只负责抓包,并不帮你解析包里到底是什么内容你只能看到一堆16进制数,代表什么意思需要你知道通信协议才行

OK,谢谢了。
解决方案十三:
没那么复杂,有系统事件的如果是windowsservice,已经有现成的SessionChanged事件,你判断ChangedReason为RemoteConnect(远程连接),成功后登陆会再次触发该事件,ChangedReason变为SessionLogon,注销SessionLogoffwinform中的做法则需要调用P/InvokeAPI,BOOLWTSRegisterSessionNotification(_In_HWNDhWnd,_In_DWORDdwFlags);hWnd是用来接收通知的窗口句柄form.Handle,调用WTSUnRegisterSessionNotification可卸载监听设置监听后,重写Form的WndProc,处理消息体WM_WTSSESSION_CHANGE
解决方案十四:
成功后登陆=>登陆成功后
解决方案十五:
引用12楼dongxinxi的回复:

没那么复杂,有系统事件的如果是windowsservice,已经有现成的SessionChanged事件,你判断ChangedReason为RemoteConnect(远程连接),成功后登陆会再次触发该事件,ChangedReason变为SessionLogon,注销SessionLogoffwinform中的做法则需要调用P/InvokeAPI,BOOLWTSRegisterSessionNotification(_In_HWNDhWnd,_In_DWORDdwFlags);hWnd是用来接收通知的窗口句柄form.Handle,调用WTSUnRegisterSessionNotification可卸载监听设置监听后,重写Form的WndProc,处理消息体WM_WTSSESSION_CHANGE

虽然看不懂。但还是非常感谢了
解决方案:
引用13楼dongxinxi的回复:

成功后登陆=>登陆成功后

你好,有没有具体的例子呢
解决方案:
只要你了解了windows的消息处理机制是很简单的using...usingSystem.Runtime.InteropServices;usingSystem.Security.Principal;classFrmSessionNotificationReciever:Form{constintWM_WTSSESSION_CHANGE=0x02B1;constintNOTIFY_FOR_ALL_SESSIONS=???;//这个值没查到constintBUFFER_SIZE=256;enumSessionChangeReason{//ThesessionidentifiedbylParamwasconnectedtotheconsoleterminalorRemoteFXsession.WTS_CONSOLE_CONNECT=1,//ThesessionidentifiedbylParamwasdisconnectedfromtheconsoleterminalorRemoteFXsession.WTS_CONSOLE_DISCONNECT=2,//ThesessionidentifiedbylParamwasconnectedtotheremoteterminal.WTS_REMOTE_CONNECT=3,//ThesessionidentifiedbylParamwasdisconnectedfromtheremoteterminal.WTS_REMOTE_DISCONNECT=4,//AuserhasloggedontothesessionidentifiedbylParam.WTS_SESSION_LOGON=5,//AuserhasloggedoffthesessionidentifiedbylParam.WTS_SESSION_LOGOFF=6,//ThesessionidentifiedbylParamhasbeenlocked.WTS_SESSION_LOCK=7,WTS_SESSION_UNLOCK=0x8,//ThesessionidentifiedbylParamhasbeenunlocked.WTS_SESSION_REMOTE_CONTROL=0x9,//ThesessionidentifiedbylParamhaschangeditsremotecontrolledstatus.Todeterminethestatus,callGetSystemMetricsandchecktheSM_REMOTECONTROLmetric.WTS_SESSION_CREATE=0xA,//Reservedforfutureuse.WTS_SESSION_TERMINATE=0xB}publicFrmSessionNotificationReciever(){this.Load+=newEventHandler(Form_Load);}protectedoverridevoidWndProc(refMessagem){if(m.Msg==WM_WTSSESSION_CHANGE){intsessionId=m.LParam.ToInt32();switch((SessionChangeReason)m.WParam){caseSessionChangeReason.WTS_REMOTE_CONNECT://远程连接(输入服务器信息后,点击“连接”时触发)break;caseSessionChangeReason.WTS_SESSION_LOGON://连接后,用户信息验证之后登陆成功时触发break;}}base.WndProc(refm);}//根据sessionId获取用户信息publicstaticboolAPIQueryUserDomain(intsessionId,outstringuserDomain){userDomain=null;boolsuccess=false;IntPtrhTokenPrimary=IntPtr.Zero,hTokenUser=IntPtr.Zero;try{//通过PrimaryToken查询UserTokensuccess=WTSQueryUserToken(sessionId,outhTokenPrimary);if(!success){returnfalse;}uintreturnLength;hTokenUser=System.Runtime.InteropServices.Marshal.AllocHGlobal(BUFFER_SIZE);success=GetTokenInformation(hTokenPrimary,TokenClassUser,hTokenUser,BUFFER_SIZE,outreturnLength);if(!success){returnfalse;}vartokenUser=(TOKEN_USER)Marshal.PtrToStructure(hTokenUser,typeof(TOKEN_USER));varaccount=newSecurityIdentifier(tokenUser.User.Sid).Translate(typeof(NTAccount))asNTAccount;if(account==null){returnfalse;}userDomain=account.ToString();returnuserDomain.Length!=0;}finally{if(hTokenPrimary!=IntPtr.Zero)CloseHandle(hTokenPrimary);if(hTokenUser!=IntPtr.Zero)System.Runtime.InteropServices.Marshal.FreeHGlobal(hTokenUser);}}privatevoidForm_Load(objectsender,EventArgse){WTSRegisterSessionNotification(this.Handle,NOTIFY_FOR_ALL_SESSIONS);}}

API声明略去了
解决方案:
constintNOTIFY_FOR_ALL_SESSIONS=???;时间关系,这个值我没查到。你去找Wtsapi32.h文件查到
解决方案:
constintNOTIFY_FOR_ALL_SESSIONS=1;
解决方案:
引用17楼dongxinxi的回复:

constintNOTIFY_FOR_ALL_SESSIONS=???;时间关系,这个值我没查到。你去找Wtsapi32.h文件查到

好的谢谢了
解决方案:
获取客户端浏览器信息和IP地址protectedvoidPage_Load(objectsender,EventArgse){lblInfo.Text="您的IP地址:"+Request.UserHostAddress;}protectedvoidPage_Load(objectsender,EventArgse){//获取浏览器的信息lblinfo.Text="浏览器使用的平台是:"+Request.Browser.Platform+"<br>"+"浏览器类型:"+Request.Browser.Type+"<br>"+"浏览器版本:"+Request.Browser.Version;}
解决方案:
引用20楼xiaoxu_2629603619的回复:

获取客户端浏览器信息和IP地址protectedvoidPage_Load(objectsender,EventArgse){lblInfo.Text="您的IP地址:"+Request.UserHostAddress;}protectedvoidPage_Load(objectsender,EventArgse){//获取浏览器的信息lblinfo.Text="浏览器使用的平台是:"+Request.Browser.Platform+"<br>"+"浏览器类型:"+Request.Browser.Type+"<br>"+"浏览器版本:"+Request.Browser.Version;}

谢谢了,我需要获取的是远程服务器的用户信息
解决方案:
引用21楼Cai_Ethan的回复:

Quote: 引用20楼xiaoxu_2629603619的回复:
获取客户端浏览器信息和IP地址protectedvoidPage_Load(objectsender,EventArgse){lblInfo.Text="您的IP地址:"+Request.UserHostAddress;}protectedvoidPage_Load(objectsender,EventArgse){//获取浏览器的信息lblinfo.Text="浏览器使用的平台是:"+Request.Browser.Platform+"<br>"+"浏览器类型:"+Request.Browser.Type+"<br>"+"浏览器版本:"+Request.Browser.Version;}

谢谢了,我需要获取的是远程服务器的用户信息

其实就这个最靠谱,那些说抓网卡数据包的是个什么心态秒秒钟几千个包去分析,筛选?你可以在服务程序里面读出数据,放在其他地方,db,cache,webservice等,然后winform去读.
解决方案:
如果远程桌面的通讯消息能够通过抓包解析出来,谁还敢用windows做服务器?

时间: 2024-09-20 05:33:28

C# 如何获取远程服务器用户的信息?的相关文章

上传-如何获取远程服务器用户对应下的目录树

问题描述 如何获取远程服务器用户对应下的目录树 最近在做一个文件上传下载的功能,从本地和远程linux服务器下载或上传文件,可以通过点击上传文件按钮获取本地目录,从而选择文件:如何获取远程服务器用户对应下的目录树呢,可视化操作 解决方案 向服务器查询借口获取结果

session-WebSocket获取的登录用户的信息

问题描述 WebSocket获取的登录用户的信息 WebSocket怎么获取放在session里的登录用户的信息?求指教 解决方案 你上面提到的其实并不是乱码,而是urlencode编码之后的字符序列.你可以使用以下代码进行解码: String decodeStr = URLDecoder.decode(queryStr, "utf-8"); 解码之后再做分析. 解决方案二: 1.首先你要区分是HttpSession还是Websocket会话session. 2.HttpSession

snmp4j获取远程服务器的 上传和下载流量

问题描述 snmp4j获取远程服务器的 上传和下载流量 对应OID是多少,在哪里可以查到,不要复制粘贴的,要给思路的.谢谢了 解决方案 SNMP Interfaces Group: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ifNumber 1.3.6.1.2.1.2.1 ifTable 1.3.6.1.2.1.2.2 ifEntry 1.3.6.1.2.1.2.2.1 ifIndex 1.3.6.1.2.

java通过ip获取远程服务器的内存使用率

问题描述 java通过ip获取远程服务器的内存使用率 java通过ip获取远程服务器的内存使用率,哪位大神会,或者可以给我分享一下,这个研究了很久实在没办法解决,我的邮箱是476562571@qq.com 解决方案 1.能直接ssh么? 如果可以,直接通过命令 ssh $ip free -m 获取 2.不能的话,远程服务器启一个服务,通过rpc方案解决

获取远程服务器日志文本

问题描述 多年不编码,别说思路了连基础语法都较劲--现因工作需要,要做一个WinForm工具来获取一组远程服务器中的多个应用站点的多个日志文本(.txt或.log),场景和要求如下:1.服务器信息.应用站点路径信息都配置在XML中来读取:2.各个应用站点中的日志文件生成周期和文件名都不同,无规律:3.设置手动选取的控件(如Datetimepicker)来设置要筛选的日志文件生成的时间范围:4.日志有两种,一种是错误日志,可直接获取:另一种是完整日志,需要判断日志文件中有没有关键字"Error&q

c#获取远程服务器的磁盘使用率

问题描述 请问大神们如何实现,网上查阅了wmi的貌似只有使用了多少,并没有使用率.请大神们支支招.就差这一个数据,项目到deadline了.急求. 解决方案 解决方案二:(windows)运维,要开发一个windowsservice,部署到每台服务器上.devops是一个软件研发项目(虽然是针对运维的),而不是你随便找点简单的命令学学就行的.解决方案三:有的人要么就会点手工操作,要么就寻找一点不需要编程的"技术".这并不能实现任何高大上的自动运维工作,这样的人容易被团队最先淘汰.解决方

如何获取远程服务器的CPU和内存使用率?

问题描述 小弟写一个程序想监控远程服务器CPU与内存使用率的情况,望高手指教! 解决方案 解决方案二:利用win自带的远程登录直接查看就是了,如果不完全是你自己的服务器,就得给权限才行解决方案三:参考:解决方案四:使用SNMP协议解决方案五:这个使用WMI是正确方法.

用定制的PHP应用程序来获取Web服务器的状态信息

web|web服务|web服务器|程序 大多数网站托管(Web hosting)公司都支持客户对Web站点统计数据的访问,但是你往往会觉得服务器所产生的状态信息不够全面.例如,配置不正确的Web服务器不能识别某些文件类型,这些类型的文件就不会出现在状态信息之中.幸好,你可以用PHP来定制状态信息收集程序,这样你就可以获取你所需要的信息了. 公共日志文件格式(Common Logfile Format,CLF)的结构 CLF最初是NCSA为HTTPd(全球网服务器软件)而设计的.CERN HTTP

用定制的PHP应用程序来获取Web服务器的状态信息_php基础

大多数网站托管(Web hosting)公司都支持客户对Web站点统计数据的访问,但是你往往会觉得服务器所产生的状态信息不够全面.例如,配置不正确的Web服务器不能识别某些文件类型,这些类型的文件就不会出现在状态信息之中.幸好,你可以用PHP来定制状态信息收集程序,这样你就可以获取你所需要的信息了. 公共日志文件格式(Common Logfile Format,CLF)的结构  CLF最初是NCSA为HTTPd(全球网服务器软件)而设计的.CERN HTTPd是一个由万维网联盟(World Wi