如何实现IP包转发的功能

时间:2023-01-30 17:36:40
将从原地址收到的IP包,发到相应的目的地IP
不用WinSocket, 请大家出出主意。
   有源程序提供最好,

42 个解决方案

#1


不用winsock?你要从头写tcp/ip的协议盏?

#2


不知道,上头是这么说的,我根本一点都不懂。
就想找个例程扒一下。
他说用控件还得烤好多文件,麻烦,

#3


可能他也不太懂,我都不知道是干什么用的

#4


用winsocket的话怎么办?

#5


将从原地址收到的IP包,发到相应的目的地IP


代理服务器?

#6


可能吧,或代替路由器?
我也不知道...急死我了

#7


可以使用IPMAN来实现,网络上有源代码的

#8


劳烦告知网址,或贴上来

#9


简单端口映射嘛
http://www.csdn.net/expert/topic/636/636645.xml?temp=.8629267

#10


好像不是那个

#11


恐怕要深入底层自己构造IP头了



#12


那有用控件的简单的办法么?
IP我一点都不懂

#13


IP协议栈?控件?
协议栈怎么与控件搅在一起了?
真是瞎胡闹,赫赫

WinSock是系统API,怎么会需要拷一堆文件?
是你们“上头”不懂?还是你理解错误

我个人认为你们“上头”的意思是不用Socket控件
直接调用Socket API。

如果自己构建IP包可能需要的文件更多
至少深入到IP协议栈的需要设备驱动,所以必然多一个文件
而采用WinSocket API一个文件都不用拷

#14


洗耳恭听,有源程序供参考码?

#15


我真的一点也不懂,平时都是靠扒程序的。

#16


无论用什么方法,能做出来就行呀。高手都哪儿去了???!!!
>:...{

#17


用WinSock API简单,建两个套接字,一个收,一个发。

#18


请具体一点,我是菜鸟

#19


Packet32知道吗?

不知道的话,我可以帮你写两个例程?

#20


过几天告诉你

#21


//******2000下实现的思路************
使用“中间层驱动程序”设计,可以解决这个问题。

编写一个TDI的驱动程序,来截获IP包,然后修改IRP中携带的数据,使用各种方案来与RING3的程序进行通信。

具体实现的话,需要编写WDM,因为只有它才能以最快的速度在第一时间内转反IP包;如果该处理进行在WINSOCK(姑且认为它能够实现),有时也会因为RONG3的处理速度过慢而导致缓冲区被重叠,从而导致丢包。其实,编写WDM,最简单的形式就是“中间层驱动”了,类似WIN9X下的HOOK,而“IP包转发”,就是一个“过滤器”了。

#22


如果为了实现单一功能的“过滤器”,其实也没有必要使用Packet32或者WinpCamp这种开发包。它们太复杂了,很难在一时间之内掌握并且进行熟练应用的。自己去学习学习WMD的“中间驱动”,也不是很难的。

#23


huangbeyond说得很对!

#24


谢谢,虽然没太听懂,但有点感觉了。那位有例程...
麻烦传过来,一定给分。
Email: yehuafei@163.net

#25


可以用SocketRaw,这样实现起来最简单。
当然也可以编写中间层驱动程序,但这种方法至少要求驱动开发背景,难度较大。

#26


欢迎大家踊跃讨论(这个问题已经上了首页的热点问题了)。

#27


关注,跟我的问题一样

#28


UP

#29


你看一下WINDOWS网络编程这本书咯,上面有讲到的相关的内容

#30


看看ipman的原码,可以实现收发ip包的功能

#31


呵呵,兄弟说的是UNIX下的TCP/IP吧?可惜我不太懂,不然...........































没意思

#32


其实这种东西根unix不unix的没关系。重新写IP头很低层?没看出来。winsock就是对bsd socket的一种改造而已。就算重新写协议栈也还是要用的。

#33


如果不是追求完全意义上的技术实现,可以使用API的HOOK技术。就是把那几个WINSOCK的API函数HOOK就可以了。我也在98下面实现过,当时使用的是DLL替换技术,实现起来比较轻松。但是如果是2000下,就要使用API-HOOK了。

 bigfy() 说用SocketRaw,其实是理解错误了。本意并不是“作一个可以自己设计IP包头的SOCKET”,而是“拦截所有经过的TCP/IP包,然后修改/转发”,显然,SocketRaw不能胜任。

按照贴主的原意:
“将从原地址收到的IP包,发到相应的目的地IP不用WinSocket, 请大家出出主意。   有源程序提供最好,”
还是建议:编写中间层驱动程序。
否则,欲使用其它方法实现,难!

#34


Just like Netfilter under Linux

#35


gz

#36


up

#37


huangbeyond(校园人渣) ,不是你说的那样的。其实win2k下面实现这个非常容易的

#38


用原始套接字,不难呀,有很多例子将关于代理服务器的,你可以看一看

#39


to:hehefaint(分特) 
非常想听听你的看法和意见。

#40


是不是要拦截包,然后转发???
就是代理服务器啊。

#41


对,就是代理服务起一类的东东。

我要源程序,我再加分!
现在问题点数变成 80 分了!
 
80分期待源程序!
 80分期待源程序!
  80分期待源程序!
   80分期待源程序!

#42


哎......

#1


不用winsock?你要从头写tcp/ip的协议盏?

#2


不知道,上头是这么说的,我根本一点都不懂。
就想找个例程扒一下。
他说用控件还得烤好多文件,麻烦,

#3


可能他也不太懂,我都不知道是干什么用的

#4


用winsocket的话怎么办?

#5


将从原地址收到的IP包,发到相应的目的地IP


代理服务器?

#6


可能吧,或代替路由器?
我也不知道...急死我了

#7


可以使用IPMAN来实现,网络上有源代码的

#8


劳烦告知网址,或贴上来

#9


简单端口映射嘛
http://www.csdn.net/expert/topic/636/636645.xml?temp=.8629267

#10


好像不是那个

#11


恐怕要深入底层自己构造IP头了



#12


那有用控件的简单的办法么?
IP我一点都不懂

#13


IP协议栈?控件?
协议栈怎么与控件搅在一起了?
真是瞎胡闹,赫赫

WinSock是系统API,怎么会需要拷一堆文件?
是你们“上头”不懂?还是你理解错误

我个人认为你们“上头”的意思是不用Socket控件
直接调用Socket API。

如果自己构建IP包可能需要的文件更多
至少深入到IP协议栈的需要设备驱动,所以必然多一个文件
而采用WinSocket API一个文件都不用拷

#14


洗耳恭听,有源程序供参考码?

#15


我真的一点也不懂,平时都是靠扒程序的。

#16


无论用什么方法,能做出来就行呀。高手都哪儿去了???!!!
>:...{

#17


用WinSock API简单,建两个套接字,一个收,一个发。

#18


请具体一点,我是菜鸟

#19


Packet32知道吗?

不知道的话,我可以帮你写两个例程?

#20


过几天告诉你

#21


//******2000下实现的思路************
使用“中间层驱动程序”设计,可以解决这个问题。

编写一个TDI的驱动程序,来截获IP包,然后修改IRP中携带的数据,使用各种方案来与RING3的程序进行通信。

具体实现的话,需要编写WDM,因为只有它才能以最快的速度在第一时间内转反IP包;如果该处理进行在WINSOCK(姑且认为它能够实现),有时也会因为RONG3的处理速度过慢而导致缓冲区被重叠,从而导致丢包。其实,编写WDM,最简单的形式就是“中间层驱动”了,类似WIN9X下的HOOK,而“IP包转发”,就是一个“过滤器”了。

#22


如果为了实现单一功能的“过滤器”,其实也没有必要使用Packet32或者WinpCamp这种开发包。它们太复杂了,很难在一时间之内掌握并且进行熟练应用的。自己去学习学习WMD的“中间驱动”,也不是很难的。

#23


huangbeyond说得很对!

#24


谢谢,虽然没太听懂,但有点感觉了。那位有例程...
麻烦传过来,一定给分。
Email: yehuafei@163.net

#25


可以用SocketRaw,这样实现起来最简单。
当然也可以编写中间层驱动程序,但这种方法至少要求驱动开发背景,难度较大。

#26


欢迎大家踊跃讨论(这个问题已经上了首页的热点问题了)。

#27


关注,跟我的问题一样

#28


UP

#29


你看一下WINDOWS网络编程这本书咯,上面有讲到的相关的内容

#30


看看ipman的原码,可以实现收发ip包的功能

#31


呵呵,兄弟说的是UNIX下的TCP/IP吧?可惜我不太懂,不然...........































没意思

#32


其实这种东西根unix不unix的没关系。重新写IP头很低层?没看出来。winsock就是对bsd socket的一种改造而已。就算重新写协议栈也还是要用的。

#33


如果不是追求完全意义上的技术实现,可以使用API的HOOK技术。就是把那几个WINSOCK的API函数HOOK就可以了。我也在98下面实现过,当时使用的是DLL替换技术,实现起来比较轻松。但是如果是2000下,就要使用API-HOOK了。

 bigfy() 说用SocketRaw,其实是理解错误了。本意并不是“作一个可以自己设计IP包头的SOCKET”,而是“拦截所有经过的TCP/IP包,然后修改/转发”,显然,SocketRaw不能胜任。

按照贴主的原意:
“将从原地址收到的IP包,发到相应的目的地IP不用WinSocket, 请大家出出主意。   有源程序提供最好,”
还是建议:编写中间层驱动程序。
否则,欲使用其它方法实现,难!

#34


Just like Netfilter under Linux

#35


gz

#36


up

#37


huangbeyond(校园人渣) ,不是你说的那样的。其实win2k下面实现这个非常容易的

#38


用原始套接字,不难呀,有很多例子将关于代理服务器的,你可以看一看

#39


to:hehefaint(分特) 
非常想听听你的看法和意见。

#40


是不是要拦截包,然后转发???
就是代理服务器啊。

#41


对,就是代理服务起一类的东东。

我要源程序,我再加分!
现在问题点数变成 80 分了!
 
80分期待源程序!
 80分期待源程序!
  80分期待源程序!
   80分期待源程序!

#42


哎......