`
yexin218
  • 浏览: 958131 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

疑问:为何无线网卡无法发送数据?

阅读更多

所有的测试流程表明,程序已经成功的创建新的数据包,然后调用NdisFSendNetBufferLists发送数据。更令人不甚明白的是,在本地的有线网卡上可以成功的发送出去到目的地,就是单纯无线网卡没有按照约定发送数据,所以一个可以怀疑的理由就是我们的约定出错了。调试显示所有的步骤都跟有线的一样,没有什么出路。一直觉得不可思议。

VOID
  NdisFSendNetBufferLists(
    IN NDIS_HANDLE  NdisFilterHandle,
    IN PNET_BUFFER_LIST  NetBufferLists,
    IN NDIS_PORT_NUMBER  PortNumber,
    IN ULONG  SendFlags
    ); 

 但是回到家里仔细看看了函数的其中一个参数 portNumber.这里的默认值是0.然后问题可能出在这里:

1. 如果你只有一张网卡激活使用,通常情况下,这种网卡的port number 就是0.这也就是解释为什么如果只有一张有线网卡,可以正常发送数据,或者是在两张网卡的情况下,本来两种都要发送数据的,结果却捕捉到一个数据。

2. 曾记得上次在创建一个新的Mac Entity的时候,申请的端口已经是1了。所以我怀疑如果一台机器如果有两张网卡同时使用,那么是不是每一张使用的Ndis prot number 不是一样的,其中一张自然是0,那么另外一张就可能是1了。

如果不小心设置了第二张网卡来发送数据,可是prot number填充的是0,估计就有问题了。我现在对Ndis Port不是很明白里面的架构:是每张网卡对应一个miniprot driver?然后各自激活port,还是每台机器就一个整体miniprot driver,共同分配port number,如果是第二种情况,那么我担忧的就不是多余的了。

改天抽空验证:方法应该是调用OID_GEN_ENUMERATE_PORTS 

As a query, NDIS and overlying drivers use the OID_GEN_ENUMERATE_PORTS OID to determine the characteristics of the active NDIS ports that are associated with an underlying miniport adapter.

返回的结果保存在一个NDIS_PORT_ARRAY结构中

typedef struct _NDIS_PORT_ARRAY {
  NDIS_OBJECT_HEADER  Header;
  ULONG  NumberOfPorts;
  ULONG  OffsetFirstPort;
  ULONG  ElementSize;
  NDIS_PORT_CHARACTERISTICS  Ports[1];
} NDIS_PORT_ARRAY, *PNDIS_PORT_ARRAY;

 NumberOfPorts记录的是port 的个数。

typedef struct _NDIS_PORT_CHARACTERISTICS {
  NDIS_OBJECT_HEADER  Header;
  NDIS_PORT_NUMBER  PortNumber;
...
}

 这个数据结构中的ProtNumber表示的就是Port的数值了,默认是0,最大为0xFFFFFF.

================================================================================

刚才测试了,发现应该不是端口的问题,反而有可能是数据包的格式有问题。老师说Native Wifi的数据包格式会与802.3不一样。所以估计要重新设计那个Ethernet Header的格式??

===============================================================================

我问了有些人,他们说值一样的。所以我继续做了测试,那么接下来的怀疑就落在了内容得填充上了。是否无线网卡的mac地址如果不是对应本张网卡就发送不了呢? 有线的以太网卡是可以冒填的。所以我重新认真填写了一遍mac源地址。这下子就OK了。

写道
1475 1291.155273 [002586 EB7B0C] [USI 5B1430] EAPOL EAPOL:EAPOL-Start , Length = 515

 具体的信息为:

  Frame: Number = 1475, Captured Frame Length = 130, MediaType = WiFi
- WiFi: [Unencrypted Data] .T...., (I)
  - MetaData:
     Version: 2 (0x2)
     Length: 32 (0x20)
   - OpMode: Extensible Station Mode
      StationMode:           (...............................0) Not Station Mode
      APMode:                (..............................0.) Not AP Mode
      ExtensibleStationMode: (.............................1..) Extensible Station Mode
      Unused:                (.0000000000000000000000000000...)
      MonitorMode:           (0...............................) Monitor Mode
     Flags: 4294967295 (0xFFFFFFFF)
     RemData: Outbound
     TimeStamp: 03/31/2010, 09:47:58 AM
  - FrameControl: .T.... (0x0801)
     Version:        (..............00) 0
     Type:           (............10..) Data
     SubType:        (........0000....) Data
     DS:             (......01........) STA to DS via AP
     MoreFrag:       (.....0..........) No
     Retransmission: (....0...........) No
     PowerMgt:       (...0............) Active Mode
     MoreData:       (..0.............) No
     Encrypted:      (.0..............) No
     Order:          (0...............) Unordered
  - Data:
     Duration: 32768 (0x8000)
   - ClientToAP:
      BSSID: Cisco Systems, Inc. 549143
      Source: 002586 EB7B0C
      Destination: USI 5B1430
    - SequenceControl: Sequence Number = 0
       FragmentNumber: (............0000) 0
       SequenceNumber: (000000000000....) 0
- LLC: Unnumbered(U) Frame, Command Frame, SSAP = SNAP(Sub-Network Access Protocol), DSAP = SNAP(Sub-Network Access Protocol)
  - DSAP: SNAP(Sub-Network Access Protocol), Individual DSAP
     Address: (1010101.) SNAP(Sub-Network Access Protocol)
     IG:      (.......0) Individual Address
  - SSAP: SNAP(Sub-Network Access Protocol), Command
     Address: (1010101.) SNAP(Sub-Network Access Protocol)
     CR:      (.......0) Command Frame
  - Unnumbered: UI - Unnumbered Information
     MMM:  (000.....) 0
     PF:   (...0....) Poll Bit - No Response Solicited
     MM:   (....00..)
     Type: (......11) Unnumbered(U) Frame
- Snap: EtherType = EAPOL/802.1x, OrgCode = XEROX CORPORATION
    OrganizationCode: XEROX CORPORATION, 0(0x0000)
    EtherType: EAPOL/802.1x, 34958(0x888E)
- Eapol: EAPOL-Start , Length = 515
    Version: 0 (0x0)
    Type: EAPOL-Start, 1(0x01)
    BodyLength: 515 bytes
    EAPOLTypeError: EAPOL Type Error
- remainder: Length = 62
    Data: Binary Large Object (62 Bytes)

---------注意 [USI 5B1430]很奇怪,本來一連串的mac地址前面變成了USI字母,我以為那裡出錯了。一查才知道這種網卡芯片應該是USI公司的產品,即每個生成廠商都會以某個地址段為標誌。具体那些MAC地址分配给哪些厂商,可在 IEEE Standards Association的查询网址内查询得知。
http://standards.ieee.org/regauth/oui/index.shtml

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics