请教如何获取远程桌面RDP实际连接到服务器的IP?

只敲键盘不弹琴 2019-10-28 11:07:51
大佬们,有没有获取过RDP远程桌面的实际连接IP端口?我有一台专门用来给多人远程连接的计算机C,我的电脑A发送连接请求到B,然转由B转发给C,这样我就远程到了C。此时我在C上用WTSQuerySessionInformation获取客户端IP地址获取到的是我的电脑A的地址,但实际我想获取的是B的地址。可以用netstat看到B的地址,但是由于C是被多个电脑远程连接,所以没法从netstat的返回中确定哪个是B。有没有API或者方法获取或定位B的地址?
...全文
1206 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 13 楼 陈仲甫 的回复:
引用 9 楼 只敲键盘不弹琴 的回复:
引用 8 楼 蒋晟 的回复:
Windows 10可以直接用那个反馈应用,可以用中文。但是是不是有人会投你的票那是另一回事了……
还要投票啊。。。谢谢!
别反馈了。。。曾经我注册了一个很好的代码库地址intel.visualstuio.com 但是几个月没有用 被偷偷换成intel1.visualstudio.com 各种反馈都没人管
an_bachelor 2020-09-16
  • 打赏
  • 举报
回复
引用 9 楼 只敲键盘不弹琴 的回复:
引用 8 楼 蒋晟 的回复:
Windows 10可以直接用那个反馈应用,可以用中文。但是是不是有人会投你的票那是另一回事了……
还要投票啊。。。谢谢!
别反馈了。。。曾经我注册了一个很好的代码库地址intel.visualstuio.com 但是几个月没有用 被偷偷换成intel1.visualstudio.com 各种反馈都没人管
  • 打赏
  • 举报
回复
引用 10 楼 weixin_42743782 的回复:
楼主,WTSQuerySessionInformation这个只能在c++中使用吗? 用python怎么调用呢?假设我要获取远程登录服务器的笔记本的主机名,WTSClientName,这个应该怎么实现呢?
楼上
  • 打赏
  • 举报
回复
给你我的测试函数中的一个: bool GetWTSClientInfo() { ulog("WTSClientInfo-----------------------------"); if(!GetSystemMetrics(SM_REMOTESESSION)) //验证是否远程桌面 { ulog("非远程桌面环境,获取失败"); return false; } LPSTR pBuffer = NULL; DWORD dwBufferLen; BOOL bRes = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientInfo, &pBuffer, &dwBufferLen); if (bRes == FALSE) return false; WTSCLIENTA *pdata = (WTSCLIENTA *)pBuffer; ulog("WTSClientInfo:ClientAddress %d.%d.%d.%d",(pdata->ClientAddress)[0],(pdata->ClientAddress)[1],(pdata->ClientAddress)[2],(pdata->ClientAddress)[3]); ulog("WTSClientInfo:ClientAddressFamily %d",pdata->ClientAddressFamily); ulog("WTSClientInfo:ClientName %s",pdata->ClientName); ulog("WTSClientInfo:ClientBuildNumber %d",pdata->ClientBuildNumber); ulog("WTSClientInfo:ClientDirectory %s",pdata->ClientDirectory); ulog("WTSClientInfo:ClientHardwareId %d",pdata->ClientHardwareId); ulog("WTSClientInfo:ClientProductId %d",pdata->ClientProductId); ulog("WTSClientInfo:ColorDepth %d",pdata->ColorDepth); ulog("WTSClientInfo:DeviceId %s",pdata->DeviceId); ulog("WTSClientInfo:Domain %s",pdata->Domain); ulog("WTSClientInfo:EncryptionLevel %d",pdata->EncryptionLevel); ulog("WTSClientInfo:HRes %d",pdata->HRes); ulog("WTSClientInfo:InitialProgram %d",pdata->InitialProgram); ulog("WTSClientInfo:OutBufCountClient %d",pdata->OutBufCountClient); ulog("WTSClientInfo:OutBufCountHost %d",pdata->OutBufCountHost); ulog("WTSClientInfo:OutBufLength %d",pdata->OutBufLength); ulog("WTSClientInfo:UserName %d",pdata->UserName); ulog("WTSClientInfo:VRes %d",pdata->VRes); ulog("WTSClientInfo:WorkDirectory %s",pdata->WorkDirectory); WTSFreeMemory(pBuffer); return true; } ulog是用来写日志的,这里我用来把结果写到文件,因为是别人需要,我自己的话,调试一个一个看就明了了。python我没用过,你该去看看python怎么调用C库就行了
Streamlit 2020-09-11
  • 打赏
  • 举报
回复
楼主,WTSQuerySessionInformation这个只能在c++中使用吗? 用python怎么调用呢?假设我要获取远程登录服务器的笔记本的主机名,WTSClientName,这个应该怎么实现呢?
  • 打赏
  • 举报
回复
引用 8 楼 蒋晟 的回复:
Windows 10可以直接用那个反馈应用,可以用中文。但是是不是有人会投你的票那是另一回事了……
还要投票啊。。。谢谢!
蒋晟 2019-11-16
  • 打赏
  • 举报
回复
Windows 10可以直接用那个反馈应用,可以用中文。但是是不是有人会投你的票那是另一回事了……
蒋晟 2019-11-07
  • 打赏
  • 举报
回复
这个还真没有,你可以找微软要,不过你这需求太小众了,我不报乐观态度。
  • 打赏
  • 举报
回复
引用 6 楼 蒋晟 的回复:
这个还真没有,你可以找微软要,不过你这需求太小众了,我不报乐观态度。
嗯,在微软API里找了段时间没什么收获,也许我该换个思路去看看头文件和用工具看看相关动态库里有没有没公布的可用函数。你们是怎么联系微软要呢?发邮件还是有提问的板块,是不是得全程英文…
  • 打赏
  • 举报
回复
引用 3 楼 蒋晟 的回复:
RDP是有API,不过人家没有记录物理地址,只有个名字。 虚拟频道可以客户端跟服务器端通讯,不过你要的不是客户端地址而是转发服务器的,这个虚拟频道还真没办法。
谢谢你的回复!
  • 打赏
  • 举报
回复
嗯,我用WTSQuerySessionInfomation就是获取了客户端的IP,而且按微软的备注,他们也知道没法用它获取到实际连接地址。那按这思路,应该有方法获取实际连接,就是转发服务器的地址。可惜那处文档并没有提该怎么获取。你们还可以用什么API获取RDP相关信息?我可以以它为基准点,在找下微软文档里与它相关的API看下能否找到可用API或者方法。谢谢你的回复!
蒋晟 2019-11-02
  • 打赏
  • 举报
回复
RDP是有API,不过人家没有记录物理地址,只有个名字。 虚拟频道可以客户端跟服务器端通讯,不过你要的不是客户端地址而是转发服务器的,这个虚拟频道还真没办法。
  • 打赏
  • 举报
回复
引用 1 楼 蒋晟 的回复:
路上可能有B1、B2、B3这样多层的设备,远程桌面协议不像HTTP,转发一层就用X-Forwarded-For记录一次IP地址。 想知道最后一级的来源IP地址的话,可以开登录审核然后根据session创建的时间去查安全事件日志里的4624 (session logon) 和4778 (disconnected session re-logon) 事件。这个方法的问题是用户太多,同一时间有多个用户登录就不知道哪个是哪个了。
额,这方法人用起来还好,我是要写代码实现,略微有点复杂化了。按理说应该有API能够获取到才对。而且我那个远程机是不能保证用户不同时登录
蒋晟 2019-10-28
  • 打赏
  • 举报
回复
路上可能有B1、B2、B3这样多层的设备,远程桌面协议不像HTTP,转发一层就用X-Forwarded-For记录一次IP地址。 想知道最后一级的来源IP地址的话,可以开登录审核然后根据session创建的时间去查安全事件日志里的4624 (session logon) 和4778 (disconnected session re-logon) 事件。这个方法的问题是用户太多,同一时间有多个用户登录就不知道哪个是哪个了。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧