如何用ICMP做一个聊天程序?(50分)

  • 主题发起人 主题发起人 张无忌
  • 开始时间 开始时间

张无忌

Unregistered / Unconfirmed
GUEST, unregistred user!
我们这用中国网通,他把各个子网之间的TCP/UDP数据传输都给关了,
只能用ICMP和IGMP包通讯,我做了一个ICMP包的聊天程序,就的是原始套接字,
用PING里面的数据来夹带数据,但是奇怪的是对方不能接受到数据,我做的一个线程不能
接受到数据!
那位有这方面资料的吗?
 
据说下一代黑客软件将使用ICMP
 
我的做好了,呵呵
 
piece of cake
 
icmp是建立在网络层的基础上的,ping会用到他,至于建立在tcp/ip上的应用的话,
赫赫。。。。
我都想知道
 
由于我们用的宽带网之间的子网之间的TCP/DUP包都被路由器过滤了,
我在用我做的扫描工具扫描后,发现居然可以PING对方,对方对ICMP
包的接受和发送不受影响,呵呵,我就想到用ICMP包来和其他同学聊
天和讨论问题。
我做的程序已经可以用了,支持多人聊天,由于ICMP的特殊原因,
没有客户机和服务器的。我的聊天程序既是客户机又是服务器。
 
张无基,你能给我那个delphi 的类蚂蚁的下载的东西吗?
我可以把分都给你!
我可以还给你分数的!
我的这个东西很急的!现在我又没有很多得分!
你能不能先帮我一下!拜托了,我一定还你分!
 
TO CaiBirD
我是用自己做的服务器,我想只要修改一下client的字符处理部分就可以用在
http协议上,找我用qq 775033把,如果不信,我把客户端程序给你,你下我的
大文件试试如何?
 
ICMP报文直接封装在数据链路帧中,而非封装在IP包中。它是IP层的一部分
(ICMP协议和IP协议处在同一层)
ICMP的详细定义可以看RFC 777 Internet Control Message Protocol。
按ICMP报文中定义的类型(type)字段分,可分为这几种
0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
8 Echo
11 Time Exceeded
12 Parameter Problem
13 Timestamp
14 Timestamp Reply
其报文格式:
以Destination Unreachable Message为例:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

不知你用的是哪一种。
问题是操作系统在接收到ICMP的报文后会自行处理掉,不知你拿什么办法接收,除非替换
掉sock.dll之类的东西。
 
我用的是消息请求和消息回复,也就是代码为15和16的,系统并不丢弃,
我自己用原始套接字可以接受到数据,
还有并不是所有的ICMP包都由系统响应,有部分可以由应用程序响应的,
我用的就是。
 
15和16在标准中已废弃不用。用该类型自己写程序在局域网中通信或许可以,但它
未必能够通过路由器。路由器在收到类型为15和16的ICMP报文后可能会将其丢弃(未实验
过)。标准之所以将15和16作废,可能就是为了防止你想要做的事情:)。
不过我不能确定,关注。
 
:)老兄你有没有QQ啊?
你应该看了我开始为什么要做这个东东,就是在一个大的A类网内用,
他们相互之间的路由器接受到非本网内的TCP/UDP都丢弃,我们之间
不能聊天了,当然就不能泡MM了:),相互之间的聊天不能进行,
只有用QQ上网聊,这个要MONEY的,我发现我可以PING通他们,就想
到了用ICMP包,但是不是所有的机器都用的是WIN2000,SIO_RCVALL
在98下不能用,我就不能通过TYPE=8的PING数据包来夹带数据了,我
试了很多类型,发现TYPE等于15和16的可以用,就用这类的做出来了,
测试通过,可以用。
 
抱歉,没有。你已经解决问题了吗?
 
我解决了问题,为了提高效率。我做了点修改。
不过出了点小问题,我对接受WSARecvFrom用重叠I/O,但是总是说参数错误。
我的代码没有问题啊,我以前用WSARecv用重叠I/O做过好几个程序,都没有
问题。
是不是原始套接字不能用重叠I/O,或者我的WSARecvFrom参数真的出错了。
 
[8D]分都给
 
后退
顶部