J
jingtao
Unregistered / Unconfirmed
GUEST, unregistred user!
[]少唬人了.
ISCSI网络存储方案用驱动是不得已而为之,如果能在上层完成,不可能用驱动.而且网络存储方案主要是因为文件过滤部分需要用驱动.
"入侵检测集群,联动防火墙内部的通讯就更不用讲了,肯定用驱动来收发数据包"这个跟通信完全是两回事情吧,只是检测数据包而已.
"甚至我们大家都知道WinpCap方案都在使用驱动来做直接通讯"
这个就更加错误了.一般很少(几乎没有)人用它来直接做通讯,最明显一个原因就是TCP协议栈的问题.所以一般只是用来做SNIFF之类,因为网卡会把非发送给本机的数据丢弃,所以是不得已而为之.如果能直接在上层拦截数据,经过WINDOWS自身协议层得到完整的数据包,谁会用WinPCap?
不知道谁见识少.WINPCAP早几年就用过了,当时主要是拦截修改数据包,部分代码段(只是很少部分,你可以看出要自己用WINPCAP收发数据是多少麻烦的事情):
//发现有局部网电脑下载文件,那么给下载欺骗服务器发送SYN,模拟客户端连接,进行会话劫持,将文件内容替换成我们的:
SendTcpFlagToDestMACAndIP(
PORT_HTTP, //dest port
punsigned_char(@pConnect^.ServerMAC), //dest mac
inet_addr(SnoopServerIP), //dest ip
pConnect^.vport, //src port
inet_addr(VirualClientIP), //src ip
punsigned_char(@g_szOwnMAC), //src mac
SYN,
htonl(pConnect^.seq - 1),
0,
htons(pConnect^.ident - 2),
WINSIZE, TRUE, ThreadNo);
{$IFDEF TRACELOG}
TRACELOG('给下载欺骗服务器重发SYN,模拟客户端连接,进行会话劫持');
{$ENDIF}
Result := TRUE; Exit;
end
else if (pConnect^.Flag = $03) then
begin
usIPHeadLen := (pTempletPacket^.iphdr.h_verlen and $0F) * sizeof(unsigned_long);
usTCPHeadLen := ((pTempletPacket^.tcphdr.th_lenres shr 4) and $0F) * sizeof(unsigned_long);
iTcpDataLen := ntohs(pTempletPacket^.iphdr.total_len) - usIPHeadLen - usTCPHeadLen;
pTcpData := pchar(pTempletPacket) + sizeof(TEHHDR) + usIPHeadLen + usTCPHeadLen;
其中TCP协议栈是直接移植单片机上面的.结合硬件进行SNIFF ADSL上网数据并修改数据再回传的我们也做过.还有一个项目是直接走网卡收发数据,但那是因为只有这样一来才能穿越所有软件防火墙,也是不得已而为之.如果上层能完成的功能,没有人会自己写底层.
你丫少在那里吹,动不动就"驱动".记得还有个贴说检测HOOK,你也是在那里"用驱动".好像只要不懂的,就一句"驱动",全部解决.真是误导大众.而且开发程序,实在没有必要什么都扯到驱动,本身驱动也没啥丫神秘的.开发项目讲求的是效率,能在上层完成的,就不要在下层动手,除非你能保证你写的比微软的好.
一句话:你去驱动开发论坛问问,看谁同意用驱动收发处理数据比完成端口性能高.如果你驱动写的不好(因为所有数据包你都得分析,处理),反而拖慢上面的别的应用程序.
ISCSI网络存储方案用驱动是不得已而为之,如果能在上层完成,不可能用驱动.而且网络存储方案主要是因为文件过滤部分需要用驱动.
"入侵检测集群,联动防火墙内部的通讯就更不用讲了,肯定用驱动来收发数据包"这个跟通信完全是两回事情吧,只是检测数据包而已.
"甚至我们大家都知道WinpCap方案都在使用驱动来做直接通讯"
这个就更加错误了.一般很少(几乎没有)人用它来直接做通讯,最明显一个原因就是TCP协议栈的问题.所以一般只是用来做SNIFF之类,因为网卡会把非发送给本机的数据丢弃,所以是不得已而为之.如果能直接在上层拦截数据,经过WINDOWS自身协议层得到完整的数据包,谁会用WinPCap?
不知道谁见识少.WINPCAP早几年就用过了,当时主要是拦截修改数据包,部分代码段(只是很少部分,你可以看出要自己用WINPCAP收发数据是多少麻烦的事情):
//发现有局部网电脑下载文件,那么给下载欺骗服务器发送SYN,模拟客户端连接,进行会话劫持,将文件内容替换成我们的:
SendTcpFlagToDestMACAndIP(
PORT_HTTP, //dest port
punsigned_char(@pConnect^.ServerMAC), //dest mac
inet_addr(SnoopServerIP), //dest ip
pConnect^.vport, //src port
inet_addr(VirualClientIP), //src ip
punsigned_char(@g_szOwnMAC), //src mac
SYN,
htonl(pConnect^.seq - 1),
0,
htons(pConnect^.ident - 2),
WINSIZE, TRUE, ThreadNo);
{$IFDEF TRACELOG}
TRACELOG('给下载欺骗服务器重发SYN,模拟客户端连接,进行会话劫持');
{$ENDIF}
Result := TRUE; Exit;
end
else if (pConnect^.Flag = $03) then
begin
usIPHeadLen := (pTempletPacket^.iphdr.h_verlen and $0F) * sizeof(unsigned_long);
usTCPHeadLen := ((pTempletPacket^.tcphdr.th_lenres shr 4) and $0F) * sizeof(unsigned_long);
iTcpDataLen := ntohs(pTempletPacket^.iphdr.total_len) - usIPHeadLen - usTCPHeadLen;
pTcpData := pchar(pTempletPacket) + sizeof(TEHHDR) + usIPHeadLen + usTCPHeadLen;
其中TCP协议栈是直接移植单片机上面的.结合硬件进行SNIFF ADSL上网数据并修改数据再回传的我们也做过.还有一个项目是直接走网卡收发数据,但那是因为只有这样一来才能穿越所有软件防火墙,也是不得已而为之.如果上层能完成的功能,没有人会自己写底层.
你丫少在那里吹,动不动就"驱动".记得还有个贴说检测HOOK,你也是在那里"用驱动".好像只要不懂的,就一句"驱动",全部解决.真是误导大众.而且开发程序,实在没有必要什么都扯到驱动,本身驱动也没啥丫神秘的.开发项目讲求的是效率,能在上层完成的,就不要在下层动手,除非你能保证你写的比微软的好.
一句话:你去驱动开发论坛问问,看谁同意用驱动收发处理数据比完成端口性能高.如果你驱动写的不好(因为所有数据包你都得分析,处理),反而拖慢上面的别的应用程序.