linux网卡抓包命令,基于Linux Socket实现的网卡抓包程序

【前言】通过对数据包的分析,我们可以判断通信双方的操作系统、网络信息流量、经过的路由、数据包的大小,以及数据包的内容等等。尤其对于喜欢网络安全的人来说,掌握这方面的知识是相当重要的。本文介绍一个基于Linux平台实现的网络抓包工具。

0.基础知识

在Linux环境下,可以使用raw

socket,即原始套接字,接收本机网卡上的数据帧或者数据包,实现对与监听网络的流量和分析是很有作用的。一共可以有3种方式创建这种socket:

1.socket(AF_INET,

SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包

2.socket(PF_PACKET,

SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧

3.socket(AF_INET,

SOCK_PACKET, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))过时了,不要用啊 1.程序代码

/********************************************************

*

功能:网络抓包工具

* 环境: GCC-4.2.4

* 作者:YSQ-NJUST,yushengqiangyu@163.com

*

备注:自由软件,主要用于学习、交流、共享。

*******************************************************/

#include

#include #include

#include #include

#include #include

#include #include

#include #include

#include #include

#include #include

/* 接收缓冲区大小 */

#define RCV_BUF_SIZE     1024 * 5

/* 接收缓冲区 */

static int g_iRecvBufSize = RCV_BUF_SIZE;

static char

g_acRecvBuf[RCV_BUF_SIZE] = {0};

/* 物理网卡接口,需要根据具体情况修改 */

static const char *g_szIfName = "eth1";

/*

以太网帧封装的协议类型 */

static const int      g_iEthProId[] = {

ETHERTYPE_PUP,

ETHERTYPE_SPRITE,

ETHERTYPE_IP,

ETHERTYPE_ARP,

ETHERTYPE_REVARP,

ETHERTYPE_AT,

ETHERTYPE_AARP,

ETHERTYPE_VLAN,

ETHERTYPE_IPX,

ETHERTYPE_IPV6,

ETHERTYPE_LOOPBACK

};

static const

char g_szProName[][24] = { "none", "xerox pup", "sprite", "ip",

"arp",

"rarp", "app

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值