none
C# 基于NDIS的网络数据包拦截 RRS feed

  • 问题

  • 不知道.net framework 上是否有封装了NDIS的类?
    主要功能:拦截(传入本机或从本机传出的)网络数据包,可修改数据包(在程序使用包之前修改或在传送到网络前修改).
    或者,是否有提供此功能的类?
    或者,是否有大侠能提供这样的类及C#案例源码呢?
    我的邮箱是:706599806@qq.com
    先谢谢了. 
    2009年8月28日 6:17

答案

全部回复

  • public
     bool
     ProcessNextPacket(ProcessNextPacketFn impl, LogFn log, 
    RawPacket rp, NdisHookStubs.NEXT_PACKET np, int ord, DateTime tm)
    {
    // the packet must be a TCP packet.

    if (rp is EthernetPacket && (
    (EthernetPacket)rp)._tranHeader is TranProt_TCP)
    {
    // the packet must be received from the port 80.

    TranProt_TCP tcp = (TranProt_TCP)((EthernetPacket)rp)._tranHeader;
    if (tcp._dstPort == 80 && np._bDirection != 0 /* SENT*/ )
    {
    try
    {
    // must be an HTTP GET request. Skip the IP and TCP headers.

    if (rp._data[54 ] == ' G' && rp._data[55 ] == ' E' &&
    rp._data[56 ] == ' T' )
    {
    int i;
    System.Text.ASCIIEncoding ascii =
    new System.Text.ASCIIEncoding();

    // get the host from the HTTP GET request.

    string host = " " ;
    for (i = 58 ; i < rp._data.Length - 4 ; i++)
    if (ascii.GetString(
    rp._data, i, 5 ).ToLower() == " host:" )
    {
    // skip the white spaces.

    i += 5 ;
    while (rp._data[i++] == ' ' ) ;
    int hostStart = i - 1 ;

    // find the end of the host string.

    while (rp._data[i++] != 0xD) ;

    // save the host.

    host = ascii.GetString(rp._data, hostStart,
    i - hostStart - 1 );
    break ;
    }

    // find the end of the URL string.

    i = 58 ;
    while (rp._data[i++] != ' ' ) ;

    // save the url.

    string url = ascii.GetString(rp._data, 58 , i - 58 - 1 );

    // log in the console and show the packet in the list

    // control.

    log(" http://" + host + url);
    return impl(rp, np, ord, tm);
    }
    }
    catch
    { }
    }
    }
    return false ;
    }
    2009年8月28日 6:46
  • 你好,请参考下这篇文章 http://blog.csdn.net/chief1985/archive/2008/11/16/3308001.aspx 不知道是否对你有用
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月28日 10:12
    版主
  • 只有驱动可以访问NDIS,C#不能用来写驱动。

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月28日 19:18
    版主
  • 你好!
         可以参考这里,希望对你有帮助:
    http://down.china-code.net/6/81/40686/ccCPVken.html
    周雪峰
    2009年8月29日 5:23
    版主
  • 你好,请参考,http://download.csdn.net/source/670018
    jon.valett@gmail.com
    2009年8月29日 14:36
    版主