Linux下的Packet Socket的使用
来源:互联网 发布:像淘宝拍卖网站有哪些 编辑:程序博客网 时间:2024/06/05 20:22
Linux下的Packet Socket的使用
Hanse <hansel@163.com>
2009-4-3
Linux支持PF_PACKET类型的套接字,用于实现用户层的网络协议。通过该SOCK_RAW类型的Packet socket,应用程序可以直接接收带完整二层数据帧,处理完毕后再使用该socket发出二层数据帧。因此可以实现更底层的网络协议。也可以通过该类型的Socket实现网络抓包,当然,如果要抓取不是自己的网络报文,还需要把网卡设置为混杂模式。
1、创建Packet Socket
<pre>
#include <sys/socket.h>
#include <netpacket/packet.h>
#include <net/ethernet.h> /* the L2 protocols */
packet_socket = socket(PF_PACKET, int socket_type, int protocol);
</pre>
其中socket_type可以是SOCK_DGRAM,SOCK_RAW。设置为SOCK_RAW则接收到的报文中包含二层协议头,否则只有二层数据帧内容。
例如:
int skfd;
skfd = socket(PF_PACKET, SOCK_RAW, htons(protocol));
2、绑定到网络接口
这一步是可选的。如果不绑定,则所有接口上的二层数据帧都会收到。
struct sockaddr_ll ll;
struct ifreq ifr;
strncpy(ifr.ifr_name, l2->ifname, sizeof(ifr.ifr_name));
memset(l2, 0, sizeof(*l2));
strncpy(l2->ifname, ifname, sizeof(l2->ifname));
memset(&ll, 0, sizeof(ll));
ll.sll_family = PF_PACKET;
ll.sll_ifindex = ifr.ifr_ifindex;
ll.sll_protocol = htons(protocol);
if (bind(l2->fd, (struct sockaddr *) &ll, sizeof(ll)) < 0) {
perror("bind[PF_PACKET]");
close(l2->fd);
free(l2);
return NULL;
}
protocol是需要监听的协议类型,如果为ETH_P_ALL,则接收所有数据帧。
注意:
桥中接收不到转发的非自己的报文
ssize_t recvfrom(int s, void *buf, size_t len, int flags,
struct sockaddr *from, socklen_t *fromlen);
如果传入fromlen为0则不会填充from参数。
参考文档:
1、Linux Man: packet(7)
- Linux下的Packet Socket的使用
- Linux下的packet socket使用总结
- Linux下的packet socket使用总结
- Linux raw socket 和 packet socket 的主要区别
- packet sniffer的使用
- Linux Kernel 下 udp packet 的收发(sk_buff+Netfiler)
- 在Ubuntu/Linux环境下使用MySQL:解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large的问题
- linux Packet socket (1)简介
- Linux下的Socket编程
- linux下的socket编程
- Linux下的Socket编程
- linux下的socket编程
- Linux下简单的socket
- Linux下的socket编程
- linux下的socket编程
- linux下的socket编程
- LINUX下的SOCKET编程
- Linux下的Socket编程
- excel引用 行递增,列不用的方法~~
- 第五章 事件和数据回发机制 2009-04-02(读书笔记)
- 16位汇编显示ASCII码表_源程序
- VC++入门程序,VC使用说明
- ALV 编辑及时更新的问题
- Linux下的Packet Socket的使用
- java基础知识总结_随机数
- 用PNG透明图片和GDI+做不规则透明窗体
- shell's getopts
- Jopr介绍
- java call web service which is c# coding
- 学习笔记--mysql odbc 乱码问题
- Delphi做的软件自动更新
- Core Java. Volume I. Fundamentals, 8th Edition 下载地址及读后感