当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > wincap and sniffer(2)

安全基础
因特网特殊的几个IP地址的用途
ADSL掉线的原因
分析系统中木马病毒的运行方式
系统和网络安全的七大误解
安全威胁术语简单介绍
光电鼠标几种故障和维修方法
移动硬盘加密软件TrueCrypt使用指南
屏蔽QQ广告和迷你首页广告的技巧
XXCOPY克隆硬盘 DOS命令恢复系统
利用Google免费接收天气预报手机短信
拒绝腾讯QQ弹出迷你首页广告
网页上隐藏Email地址的技巧
进程Explorer.exe和IExplore.exe认识
网卡MAC地址导致笔记本电脑不能上网
木马经常藏身的地方和清除方法
删除文件和粉碎文件两个功能的区别
用户不再关心Windows频繁弹出的对话框
ADSL设备出厂时默认初始IP用户名和密码
内部网络管理员降低风险的策略
频繁发生的无线互访故障现象以及应对办法

安全基础 中的 wincap and sniffer(2)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 118 ::
收藏到网摘: n/a

一些著名的嗅探器:
tcpdump/windump:支持多种unix,后者支持windows。基于libpcapSniffit:unix,windows,libpcapNgrep:libpcap,unixwindows.可以用规则表达式,识别PPP,SLIP及FDDI数据包
Sniffer pro/NetXray:专业的协议分析工具,是NAI提供的网络分析方案中的一部分
其它:
Iris
LanExplorer
NetMOnitor
CommView

单一用途的噢探器
口令嗅:winsniffer,典型的黑客工具,嗅探并解析ftp,pop3,http,icq,smtp,telnet,IMAP,NNTP等口令
password sniffer for NetHackerIII

专用嗅探器:
SMB嗅探器:L0phtcrack,SMPRelay
TCP连接会话嗅探器:CommView ,Iris,Juggernaut
SSL嗅探器:SSLDump--sslv3/tls网络协议分析工具
RIDIUS嗅控器:一个基于udp的论证记账协议,Radiusniff是其代表
PPTP嗅 控器:Anger,PPTP-sniff(solaris)
SNMP嗅探器:Snmpsniff

交换网络嗅探器:Ettercap
综合:Dsniff
其它交换网络嗅探器:
snarp,parasite

嗅探对策.........

netsys2:

网络上流传的GUNIFFER是个基本的原型:


void main(int argc, char ** argv)

{

int iErrorCode;

char RecvBuf[MAX_PACK_LEN] = {0};

usage();

if(GetCmdLine(argc, argv)==CMD_PARAM_HELP) exit(0);

//初始化SOCKET

WSADATA wsaData;

iErrorCode = WSAStartup(MAKEWORD(2,1),&wsaData);

CheckSockError(iErrorCode, "WSAStartup");

SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);

CheckSockError(SockRaw, "socket");

//获取本机IP地址

char FAR name[MAX_HOSTNAME_LAN];

iErrorCode = gethostname(name, MAX_HOSTNAME_LAN);

CheckSockError(iErrorCode, "gethostname");

struct hostent FAR * pHostent; //注意下面这三句,这里先对pHostent分配了一块

pHostent = (struct hostent * )malloc(sizeof(struct hostent));

//内存,然后有让它等于gethostbyname函数的返回

pHostent = gethostbyname(name); //值,但gethostbyname函数是自己在函数内部分配内

存的,因此上一句根本就是多余,把上一句删除后一切正常。但此程序用VC6编译运行都没有问题

,不知为何?也许是VC6的编译器优化在起作用。

SOCKADDR_IN sa;

sa.sin_family = AF_INET;

sa.sin_port = htons(6000);

memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);

free(pHostent); //由于前面分配内存的语句已经删除,所以这一句也要去掉,否则出错。感谢网友 Heyuming 发现这个问题。

iErrorCode = bind(SockRaw, (PSOCKADDR)&sa, sizeof(sa));

CheckSockError(iErrorCode, "bind");

//设置SOCK_RAW为SIO_RCVALL,以便接收所有的IP包

DWORD dwBufferLen ;

DWORD dwBufferInLen = 1 ;

DWORD dwBytesReturned = 0 ;

iErrorCode=WSAIoctl(SockRaw, SIO_RCVALL,&dwBufferInLen,

sizeof(dwBufferInLen),

&dwBufferLen, sizeof(dwBufferLen),&dwBytesReturned , NULL , NULL );

CheckSockError(iErrorCode, "Ioctl");

//侦听IP报文

while(1)

{

memset(RecvBuf, 0, sizeof(RecvBuf));

iErrorCode = recv(SockRaw, RecvBuf, sizeof(RecvBuf), 0);

CheckSockError(iErrorCode, "recv");

iErrorCode = DecodeIpPack(RecvBuf, iErrorCode);

CheckSockError(iErrorCode, "Decode");

}

}

它有2个不方便之处:
1)不能选择网卡
2)采用死循环方式读数据,改编到WINDOWS窗口模式下时有死机的感觉。