高分讨论:Windows下如何通过一个已经建立的端口收发数据(200分)

  • 主题发起人 主题发起人 progboy
  • 开始时间 开始时间
P

progboy

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有一个程序A建立了一个端口,和网络上的服务端B通信。B的IP,端口都知道,A建立的端口也知道的情况下,编写一个程序C,要求C可以通过A建立的端口向服务端B发送数据,并能够接收到B发回的数据包。A是一个别人做好的程序,我不能对其进行任何改动;服务端B的工作机制我也不清楚。因为访问服务端B要有登录的过程,这个过程我不清楚,但A可以登录到B。所以现在希望能够通过A建立的端口,向B发送数据包,并接收到返回的数据包,不知道在Windows下是否可以实现这样的功能?如何实现的?
 
那你在A进行登陆后,退出A,然后启动你的程序C,但是需要认为A退出时不会像B发送退出信息。否则一台计算机不会两个软件都使用一个端口吧,
 
知道IP和端口你的程序应该可以与A建立连接,但是要收发数据则要看A是否支持多客户以及A有没有数据验证机制。如果用serversocket和clientsocket一台计算机的两个软件可以使用同一个端口。
 
To:zywcd
如果利用Socket发送数据,得先建立连接,如果将客户端A强行中止,我的程序就得在不建立新的连接的情况下向B发包,socket可以在不Connect的情况下直接发包吗?
 
不知道Winsock支不支持两个socket绑定到一个端口进行通信,如果可以是不是就能实现上面的功能了?
 
建议看黑客教程
 
不能吧。一个端口只能绑定一次
 
就想dreamfly1024说的,使用黑客技术,否则可能难 。
delphi好像没有看到什么方式可以实现。
 
端口复用
 
使用游戏外挂技术可以轻松达到你的目的。问题是游戏 外挂技术不知你懂多少。

事实上就算你得到一个经过程序A登陆后的 socket 字柄,能发送数据给对方, 能接收发给你的数据又能怎么样? 你不是说你不了解他们的通信协议又有什么用? 就好像我听到你说话, 你也听到我说话, 但你说的是地球的语言, 我说的是火星话,鸡和鸭说~~ 如果“说错”了,对方随便就close掉连接了
 
实现是没问题的,不过,你首先要了解tcp的工作机制,需要使用到所谓的黑客技术,可以通过截取等方法就可以实现了,具体我没做过,但看到过相关的介绍,你可以上网查查。
 
先搞清A到B是TCP还是UDP连接。如果是UDP,那么就不用启动A,就可以直接向B发信息;如果是TCP,就麻烦一点了。
 
To:Writer
关于通信协议,我拦截了几个A发给B,B返回给A的数据包,发现包头是固定的,每次都是那几个字节,所以我应该可以伪造数据包。只是在建立A到B的连接时十分复杂,有很多操作是在服务器B上完成的,我无从得知细节。所以现在就想通过正常方式建立A到B的连接,然后利用这个连接将我做的数据包发送给B。理论上,只要我能够知道发送方和接收方的IP和端口号,及其定义的通信协议,就可以自己做出符合格式的TCP/IP数据包,然后发送出去。因为这个包实际上和正常的包没什么不同,所以不管中间经过多少个路由,包总是能送到B的,并且B能够正确接收。
可问题是,Windows是否提供了这样的API函数,让我将自己做的数据包发出去?
我现在换了一种方式来解决这个问题,通过获得A程序的句柄将要发送的数据以按键消息的形式传递给A,A正常发送出去后,我采用监听的办法拦截回来的数据包,并从中提取返回的数据。这个已经实现了,但仍有缺陷。就是当给A发送按键消息时,A所在窗口必须是当前活动窗口,不然A收不到消息(这个很奇怪,过去没遇到过)。而这就可能影响其他程序的运行(每次发送按键消息给A都要将A的窗口拿到前面来)。所以最好还是能够自己做TCP/IP数据包,然后发送出去。
 
后退
顶部