阅读:1941回复:11
(急!)请高手指点:两块网卡,过滤指定网卡的包,在passthru里怎么修改?
请教各位高手:
经过几天的苦读,对在passthru里面修改来过滤包,终于有点眉目了。但是,我机器上有两块网卡:一块做ADSL上网用;一块连在寝室里的局域网上面。假设我要过滤其中一块网卡上收到的包。我应该怎么样做呢? 谢谢! |
|
最新喜欢:jzyhum... |
沙发#
发布于:2002-05-05 14:48
其实你说的就是NAT,找找相关资料吧。
对于NAT我也正在实现,写了一大半代码了,但是现在突然缺乏激情了。总觉得或许爱干点别的什么。再说,NAT不是一两句话可以说清的,你必须要精通TCP/IP协议,能截包只是里面的一个很少量的问题 得到数据包后,你要判断是否是本机数据包,是就算了,否则你就要从另一个网卡发送出去。理论上就这么简单,但实现起来就麻烦了。 劝你还是好好看看TCP/IP吧!其实对于一个做网络系统扩展和网络安全的人来说会截包是必须的,可以说是最基本的技术要求,包都截不了,你还要干啥?最主要的还在于对TCP/IP的认识,了解。理清他的脉络!最好看看清华出的一本书,主要是讲的TCP/IP的软件实现,对TCP/IP软件进行了详细的分析,挺不错的!祝你好运!! |
|
|
板凳#
发布于:2002-05-05 14:54
书名是??
|
|
|
地板#
发布于:2002-05-05 15:01
用TCP/IP进行网际互连2―实现》记不清,大体是。
是个一本国外教材,我们学院图书馆有!所以记不住书名了。 |
|
|
地下室#
发布于:2002-05-05 20:33
一套三本,挂着谢希仁的名字的是吗?我记得那是好象是电子工业出的,98年板的好象是。现在早出新版了吧。那书确实不错。
|
|
|
5楼#
发布于:2002-05-22 16:33
机械工业出的,三卷中第二卷
|
|
|
6楼#
发布于:2002-05-22 18:15
引用:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 请教各位高手: 经过几天的苦读,对在passthru里面修改来过滤包,终于有点眉目了。但是,我机器上有两块网卡:一块做ADSL上网用;一块连在寝室里的局域网上面。假设我要过滤其中一块网卡上收到的包。我应该怎么样做呢? 谢谢! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 很简单的,在ProtocolReceive或ProtocolReceivePacket函数中有一个句柄,表示是哪个网卡的句柄,通过该句柄就可以实现有选择的过滤了 |
|
7楼#
发布于:2002-05-22 18:43
怎么知道哪个句柄是哪儿网卡的??
就是哪个IP地址的?? |
|
|
8楼#
发布于:2002-05-23 18:42
关注
|
|
|
9楼#
发布于:2002-05-24 14:25
谢谢各位大侠们!
最近一直忙着毕业设计,所以很少来这里了。 我后来用Bound ID 实现了两块网卡的区分。但这是passthru里面现成的。我想我还是应该静下心来,好好的看看TCP/IP。 谢谢各位的指点! |
|
10楼#
发布于:2002-05-24 21:21
具体说说看,偶正好没看过那部分的东东(LBFO)
|
|
|
11楼#
发布于:2002-05-24 21:51
小问题嘛~~既然SIRROOM了,我也来凑个热闹!首先我要批评~~~因为又是一个看例子没看全的家伙~~光看PASSTHRU不看PACKET就想写包过滤了??PACKET里面又许多宝哩!在BINDADAPT函数的传入参数有一个的名字叫IN PNDIS_STRING DeviceName的,这个东西是干什么的??看PACKET的例子里面是怎么用的没有??再看看这个:VOID
NdisMIndicateReceivePacket( IN NDIS_HANDLE MiniportAdapterHandle, IN PPNDIS_PACKET ReceivePackets, IN UINT NumberOfPackets ); 第一个参数是什么???用的是MINIPORT的HANDLE!明白了??PACKET里面为什么不用这个函数??首先是因为它没有上层协议它在协议层嘛!所以没这个需要,再就是它没有MINIPORT层啊~~当然也就没MINIPORTINITIAL函数!自然也就没人调用NdisMSetAttributes或NdisMSetAttributesEx来生成这个句柄啦!那当然又就根本不困难又条件调用啦!VOID NdisMSetAttributesEx( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportAdapterContext, IN UINT CheckForHangTimeInSeconds OPTIONAL, IN ULONG AttributeFlags, IN NDIS_INTERFACE_TYPE AdapterType ); 看看第一个参数!明白了?我们在看SEND的! VOID NdisSend( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_PACKET Packet ); 看第二个函数!IN NDIS_HANDLE NdisBindingHandle这个是什么??看看这个 VOID NdisOpenAdapter( OUT PNDIS_STATUS Status, OUT PNDIS_STATUS OpenErrorStatus, OUT PNDIS_HANDLE NdisBindingHandle, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE NdisProtocolHandle, IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_STRING AdapterName, IN UINT OpenOptions, IN PSTRING AddressingInformation OPTIONAL, ); 第三个参数是什么??所以说你看代码都没看仔细!为什么PACKET的PACKETWRITE函数里面可以直接SEND一个PACKET出去?就因为它有下层,所以有这个必要!也因为它有PROTOCOL函数,所以也会在PACKETBINDADAPT里面调用NdisOpenAdapter函数!所以也又这个句柄有这个可能! 既然说到这就顺便告诉你们ADAPT怎么来的吧~~IN NDIS_HANDLE ProtocolBindingContext这个东西看到没有??回去看看代码!再看看DDK里面是怎么说的!其实学NDIS并不难,不过是看书和看例子不仔细罢了!至于怎么过滤某个网卡上的包的问题我就不回答了!如果看到这里还不会的话你也可以去歇菜了! |
|
|