|
|
 |
 |
|
|
 |
|
sniffer技术原理及应用(1)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:1533 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [下一页]
|
1.检查网内的主机上是否将网卡设置为混合模式(有很多工具可以做到,AntiSniff,Promiscan,S
entinel等) 2.对EtterCap这样的交换网络嗅探器(进行ARP欺骗),可以采用防止ARP欺骗的方法来对待 3.SSH加密通道 4.SSL 5.VPN 6.PGP等
目前这用利用网卡混合模式来进行sniffer的软件看来作用不太大了,所以应该多考虑交换网络的可
行办法:
MAC Flooding,MAC Duplicating,ARP欺骗等等 这些方法实现起来就不怎么容易了,欢迎有兴趣的朋友提供相关的资料,呵呵!
netsys: 难道没人用过RAW SOCKET 吗? 虽然WINPCP功能很大,但RAW SOCKET可以让你直接了SOCKET的原生机制。 实际上我提的那两个问题是很容易解决的。。
netsys2: 对于一些混合模式的SNIFFER,大多采用发送特殊ARP包的方式,正确的网卡不会响应,而处于
混合模式的网卡则会响应。
当然,ARP与IP处于同层,因此你不能用RAW SOCKET完成,你需WinPcap支持工作。
下面是部分代码
AnsiString msgStatus; extern TArpFuncParam wParams;
int BuildARPPacket(PArpPacket ArpPacket, unsigned char *dst_etheraddr, unsigned char *src_etheraddr, int ar_op, unsigned
char *ar_sha, unsigned char *ar_sip, unsigned char *ar_tha, unsigned char *ar_tip,unsigned short int ar_hw) { memcpy(&(ArpPacket->eth_dst_addr), dst_etheraddr, ETH_ADD_LEN); memcpy(&(ArpPacket->eth_src_addr), src_etheraddr, ETH_ADD_LEN); ArpPacket->eth_type = htons(ETH_TYPE_ARP); ArpPacket->ar_hrd = htons(ar_hw); ArpPacket->ar_pro = htons(ARP_PRO_IP); ArpPacket->ar_hln = ARP_ETH_ADD_SPACE; ArpPacket->ar_pln = ARP_IP_ADD_SPACE; ArpPacket->ar_op = htons(ar_op); memcpy(&(ArpPacket->ar_sha), ar_sha, ARP_ETH_ADD_SPACE); memcpy(&(ArpPacket->ar_spa), ar_sip, ARP_IP_ADD_SPACE); memcpy(&(ArpPacket->ar_tha), ar_tha, ARP_ETH_ADD_SPACE); memcpy(&(ArpPacket->ar_tpa), ar_tip, ARP_IP_ADD_SPACE); memset(ArpPacket->eth_pad, 32, ETH_PADDING_ARP); return(EXIT_SUCCESS); } int OpenAdapter(LPADAPTER *lpAdapter) { *lpAdapter =
PacketOpenAdapter(wParams.AdapterList[wParams.SelectedAdapter]);
if(!(*lpAdapter) || ((*lpAdapter)->hFile == INVALID_HANDLE_VALUE)) { msgStatus = "Error : unable to open the driver."; SHOWSTAT(msgStatus); return(EXIT_FAILURE); } return(EXIT_SUCCESS); } void CloseAdapter(LPADAPTER lpAdapter) { PacketCloseAdapter(lpAdapter);
} void GetLocalMAC(LPADAPTER lpAdapter, unsigned char *ether_addr) {
ULONG IoCtlBufferLength = (sizeof(PACKET_OID_DATA) + sizeof(ULONG) - 1); PPACKET_OID_DATA OidData;
OidData = (struct _PACKET_OID_DATA *)malloc(IoCtlBufferLength); OidData->Oid = OID_802_3_CURRENT_ADDRESS;
|
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|