| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 700 人关注过本帖
标题:原始套接字编写Sniffer失败??
收藏  订阅  推荐  打印 
redice
Rank: 4
等级:高级会员
威望:6
帖子:846
积分:9054
注册:2006-12-11
原始套接字编写Sniffer失败??

希望有过原始套接字编程经验的朋友帮忙看一下:

#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment (lib,"ws2_32.lib")
//#define SIO_RCVALL 0x98000001
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
void main()
{
    SOCKET Sniffer;
    int timeout=1000;//接收超时
    struct sockaddr_in addr;
    DWORD dwret=0;
    WSADATA wsa;
    int ret,i;
    BOOL flag=TRUE;
    char RecvBuf[6144];//6KB的接收缓冲区
    if(WSAStartup(MAKEWORD(2,1),&wsa))
    {
        printf("套接字版本协商出错!\n");
        return;
    }
    Sniffer=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);//创建原始套接字
    if(INVALID_SOCKET ==Sniffer)
    {
        printf("创建套接字失败!\n");
        return;
    }
    setsockopt(Sniffer, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)); //设置 IP 头操作选项
    //设置套接字接收超时
    if(SOCKET_ERROR ==setsockopt(Sniffer,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout)))
    {
        printf("设置套接字超时失败!\n");
        closesocket(Sniffer);
        WSACleanup();
        return;
    }
    memset(&addr,0,sizeof(addr));
    addr.sin_family=AF_INET;
    //设置本地地址
    addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    //设置监听端口
    addr.sin_port=htons(1234);
    //绑定端口
    if(SOCKET_ERROR==bind(Sniffer,(struct sockaddr *)&addr,sizeof(addr)))
    {
        printf("绑定本地端口失败!错误号:%d\n",WSAGetLastError());
        closesocket(Sniffer);
        WSACleanup();
        return;
    }
    if(SOCKET_ERROR==ioctlsocket(Sniffer, SIO_RCVALL, (unsigned long*)&dwret))
    {
        printf("设置Socket I/O模式出错!\n");
        closesocket(Sniffer);
        WSACleanup();
        return;
    }
    //循环接收数据
    while(1)
    {
        ret=recv(Sniffer, RecvBuf,sizeof( RecvBuf),0);
        if(SOCKET_ERROR==ret)
        {
            if(WSAETIMEDOUT==WSAGetLastError())continue;
            printf("接收数据包出错!\n");
            closesocket(Sniffer);
            return;
        }
        i++;
        printf("接收到数据包%d",i);
    }
    WSACleanup();
    return;
}
搜索更多相关主题的帖子: Sniffer  套接字  原始  失败  编写  
2007-12-29 10:40
redice
Rank: 4
等级:高级会员
威望:6
帖子:846
积分:9054
注册:2006-12-11

顶顶顶顶顶

欢迎光临我的网站: http://redice.bookold.net/
我的博客:http://blog.bookold.net/
生于忧患 死于安乐
2007-12-29 10:57
forever74
Rank: 4
等级:高级会员
威望:2
帖子:505
积分:5844
注册:2007-12-27

搞那么多==干什么?
2007-12-29 13:51
sunkaidong
Rank: 12Rank: 12Rank: 12
来自:南京师范大学
等级:版主
威望:4
帖子:4128
积分:44851
注册:2006-12-28

暂时看不懂,帮你顶一下
2007-12-29 14:12
redice
Rank: 4
等级:高级会员
威望:6
帖子:846
积分:9054
注册:2006-12-11

各位 帮帮忙呀?

欢迎光临我的网站: http://redice.bookold.net/
我的博客:http://blog.bookold.net/
生于忧患 死于安乐
2008-1-3 20:25
b2831196
Rank: 2
等级:注册会员
帖子:52
积分:620
注册:2008-1-3


http://www.xiandai.q88d.net

平时就是喜欢购物
2008-1-3 22:05
redice
Rank: 4
等级:高级会员
威望:6
帖子:846
积分:9054
注册:2006-12-11

晕 我相信一定有人有这方面的经验的

欢迎光临我的网站: http://redice.bookold.net/
我的博客:http://blog.bookold.net/
生于忧患 死于安乐
2008-1-4 11:20
xianshizhe111
Rank: 6Rank: 6
等级:金牌会员
帖子:1451
积分:15818
注册:2007-12-8

不太懂,帮你托起来.
2008-1-4 11:43
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.078548 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved