阅读:1150回复:3
需要用到虚拟网卡吗?
在Windows下怎样把串口(COM 口)模拟成网卡?具体描述如下:
应用程序通过socket(这个socket接口要求位于数据链路层,需要自己实现,它收发的数据包是完整的以太帧,这个问题以后单独讨论)向网卡驱动传递数据,但数据最终是通过串口发送和接收的,也就是说要在网卡的驱动程序里调用串口的发送函数,串口收到数据后传递给网卡驱动。请问各位大侠怎样实现?是否要用到虚拟网卡。哪末Windows下的虚拟网卡又是怎样实现的?最好有源码。 我的msn: happy_bird2003@hotmail.com 欢迎指教。 |
|
|
沙发#
发布于:2003-12-05 09:39
其实这是一个纯软件的问题,建议你先看看tcpip协议的RFC 文档及相关书籍,你的问题可以用RAS得到解决。 在网络上,每个设备都有一个IP地址,不管它是串口还是网卡,tcpip协议中已经将物理设备的区别在物理层屏蔽了。所以当你打开Socket后,然后Bind到的是一个IP地址而不是设备名称,你要connect时也是针对ip地址的,对吗? slip / ppp 我们使用拨号连接进行通信时,都是通过串口完成,从没有人关心他是不是虚拟了网卡. 如果你在windows环境下,建议你用ras完成通信连接。剩下的工作就是纯tcpip通信了。
good luck ! |
|
板凳#
发布于:2003-12-05 11:01
我只说了问题的一部分,现在完整的描述一下:
我现在做的驱动是MASC(Mobitex Asynchronous Serial Communication)driver,Mobitex 是爱立信开发的无线通讯标准,不知大家听说过没有。这个驱动位于数据链路层,在ip层以下,它通过串口上接的专用Modem收发数据,Modem最终通过Mobitex无线网络 收发数据,每个Modem有自己的硬件地址MAN(Mobitex Address Number),就好像网卡的MAC地址一样。所以它没有也不必有IP地址。 在Linux 下有一种SOCK_PACKET类型的socket,当然这种socket是位于数据链路层的,通过把串口虚拟成网卡(通过tty线路规程、网络接口等技术实现),就能和MASC driver通信。所以当你打开Socket后,然后Bind到的是一个设备名称而不是IP地址。socket包里已经包含了源和目标硬件地址(MAN)。我现在就是想在Windows下实现这种功能, 同时又要向上提供一个socket接口,就象Linx下的OCK_PACKET那样。 希望各位能指点一二,这个问题已经困扰我好久了。谢谢各位! 我的msn: happy_bird2003@hotmail.com 欢迎指教。 |
|
|
地板#
发布于:2003-12-05 12:03
原来和你的Sock_Packet是同一个问题啊! :)
关于Win2k 用Sock_Packet 问题,国外很多bbs上有较详细的资料 大部分是关于linux sniffer 移植到win2k 平台的问题。 一般都推荐 用 Raw socket 来解决。这样就可以自己构造tcp/ip头。象linux上Sock_Packet编程其实目的就是要自己构造tcp/ip头,这样就可以自己指定mac地址域也就是你说的MAN地址。所以建议你看看Raw socket 编程的资料。这方面的资料网上很多。如: http://www.20cn.net/ns/wz/comp/data/20020818035339.htm good luck , again! |
|