TCP怎么能做到不用connect来发消息?

罗布路奇 2017-04-10 09:29:39
最近在学习做一个LSP代理
发现有个程序只调用没有用WSPConnect就可以WSPSend发送消息(注意:不是WSPSendto)

1. 如果是UDP协议,使用WSPSend之前是要先调用WSPConnect的吧?
2. WSPSocket调用两次,而且返回的socket竟然一样?

我记录下日志,大家能帮忙分析一下什么情况吗?

LSP Message: call WSPSocket, socket: 784, type: 2, protocol: 0
LSP Message: call WSPSocket, socket: 784, type: 1, protocol: 6
LSP Message: call WSPBind, socket: 784, ip: 0.0.0.0, port: 0
LSP Message: call WSPSend, socket: 784
LSP Message: call WSPSend success: buffer len: 253
LSP Message: call WSPRecv, socket: 784, error: pending
LSP Message: call WSPRecv, socket: 784, buffer size: 2649
...全文
470 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsgzs2018 2018-09-08
  • 打赏
  • 举报
回复
引用 4 楼 jshnr006 的回复:
[quote=引用 1 楼 Janxionwang 的回复:]
WSPSend肯定是要先链接的,要不然会返回错误码WSAENOTCONN;
Ws2spi.h中没有封装WSPConnect,拦截connect可以用 MessageBoxW,你这里可以使用WSAConnect


我做的是lsp代理,不是开发一个客户端,明白么[/quote]

你发现WSPCONNECT没有调用,一定是程序里用了WININET的,浏览器核心的网络程序。在WSPIoctl里把CONNECTEX HOOK就OK了。
摩登码农 2017-04-12
  • 打赏
  • 举报
回复
引用 4 楼 jshnr006 的回复:
[quote=引用 1 楼 Janxionwang 的回复:] WSPSend肯定是要先链接的,要不然会返回错误码WSAENOTCONN; Ws2spi.h中没有封装WSPConnect,拦截connect可以用 MessageBoxW,你这里可以使用WSAConnect
我做的是lsp代理,不是开发一个客户端,明白么[/quote]
引用 4 楼 jshnr006 的回复:
[quote=引用 1 楼 Janxionwang 的回复:] WSPSend肯定是要先链接的,要不然会返回错误码WSAENOTCONN; Ws2spi.h中没有封装WSPConnect,拦截connect可以用 MessageBoxW,你这里可以使用WSAConnect
我做的是lsp代理,不是开发一个客户端,明白么[/quote] 明白了明白了,你好牛B,多谢大神指教,我闻所未闻这么高端的东西,醍醐灌顶~
赵4老师 2017-04-10
  • 打赏
  • 举报
回复
使用UDP协议?
摩登码农 2017-04-10
  • 打赏
  • 举报
回复
WSPSend肯定是要先链接的,要不然会返回错误码WSAENOTCONN; Ws2spi.h中没有封装WSPConnect,拦截connect可以用 MessageBoxW,你这里可以使用WSAConnect
罗布路奇 2017-04-10
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
使用UDP协议?
只有这个程序会这样,像chrome什么的,都正常有WSPConnect 这个程序貌似是一个把web做界面的应用,我发现他走的是http连接,会不会是这个程序用了什么win32的web控件之类的东西,所以不需要走WSPConnect ?
罗布路奇 2017-04-10
  • 打赏
  • 举报
回复
引用 1 楼 Janxionwang 的回复:
WSPSend肯定是要先链接的,要不然会返回错误码WSAENOTCONN; Ws2spi.h中没有封装WSPConnect,拦截connect可以用 MessageBoxW,你这里可以使用WSAConnect
我做的是lsp代理,不是开发一个客户端,明白么
罗布路奇 2017-04-10
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
使用UDP协议?
不清楚,我看到调用两次创建socket,不知道为何两次返回都是784,第一次明显是udp,第二次就是tcp LSP Message: call WSPSocket, socket: 784, type: 2, protocol: 0 LSP Message: call WSPSocket, socket: 784, type: 1, protocol: 6

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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