2 qq964939641 qq964939641 于 2013.09.27 16:47 提问

libpcap抓包然后用socket raw 发出去

我想实现这样一个功能用pcap抓包在回调函数中用可以处理底层数据的socket套接字发出去。现在发送IP包没问题但是发送MAC包貌似死循环发送了 部分代码如下:
这是我发送数据包的代码
int sockfd_MAC = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); // 创建Socket
void SendMACPacket(int sockfd, void* msg, size_t len)
{
struct sockaddr_ll addr;
memset( &addr, 0, sizeof(addr) );
addr.sll_family = AF_PACKET;
struct ifreq ifstruct;
strcpy(ifstruct.ifr_name, "eth0");
ioctl(sockfd, SIOCGIFINDEX, &ifstruct); //??I/O??
addr.sll_ifindex = ifstruct.ifr_ifindex;
addr.sll_protocol = htons(ETH_P_ALL);
memcpy(addr.sll_addr,((struct eth_hdr*)msg)->h_source,6);

    sendto(sockfd, msg, len, 0, &addr, sizeof(struct sockaddr_ll));

}

pcap_loop(handle,packetCount,GenPcapPacket,NULL);

回调函数在这
int GenPcapPacket(u_char argument,const struct pcap_pkthdr pack,const u_char *content)
{
const u_char *buf;
buf = content;

    SendMACPacket(sockfd_MAC, (void*)buf, pack->len);

return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
linux利用raw socket抓包
来自:http://www.diybl.com/course/6_system/linux/Linuxjs/20090930/177633.html #include sys/socket.h> #include sys/ioctl.h> #include fcntl.h> #include unistd.h> #include netinet/if_ether.h> #include
基于原始套接字(raw socket)的网络抓包工具
基于raw socket的网络抓包工具 1. 原始套接字(raw socket)简介 原始套接字可以接收本机网卡上的数据帧或者数据包,利用raw socket可以编写基于IP协议的程序。一般的TCP/UDP类型的套接字只能够访问传输层以及传输层以上的数据,而原始套接字却可以访问传输层一下的数据,所以使用raw socket既可以实现应用层的数据操作,也可以实现链路层的数据操作。
Unix Socket --- 原始套接字(Raw Socket)
Unix Socket
Linux raw socket
Linux raw socket==========================================1. 为什么要详细了解raw socket呢? 其实很早以前就对原始套接字有了一定的了解,那时候还做过一个小的抓包程序,当时以为对原始套接字很熟悉了,但是最近在看nmap的时候被其中的一句话给整迷糊了。  在《Nmap Network Discovery III》的SYN scan章
libpcap抓包简单例子
#include #include #include #include #include void tcp_packet_callback(unsigned char *argument,const struct pcap_pkthdr* pcap_header,const unsigned char *packet_content) { struct tcphdr *tcpptr=(stru
linux抓包(基于libpcap)
linux下实现简单sniffer,要求同上一篇。这里基于llibcap实现,网上讲解的很详细,这里记录一下以备以后查看。 参考: libpcap安装与例程这篇讲的很详细 libpcap详解 安装与配置就省略了。 1.libpcap抓包框架     pcap_lookupdev():函数用于查找网络设备,返回可被pcap_open_live()函数调用的网络设备名指针。
Libpcap TCP UDP 抓包
这个官方程序是比较好用的,实现了UDP,TCP的抓包。学习下~ #define APP_NAME "sniffex" #define APP_DESC "Sniffer example using libpcap" #define APP_COPYRIGHT "Copyright (c) 2005 The Tcpdump Group" #define APP_DISCLAIMER "THER
linux下分别使用lipcap和socket抓包分析包
前段时间在研究抓包程序,写个测试程序,目的是为了获取网上社区的帐号(比如:腾讯微博),但是没有完成。将代码贴在此处,方便以后查询学习。如果有疑问,还望指出! 完成的工作有:源mac地址、目的mac地址、源ip、目的ip、判断是tcp还是udp,然后去掉对应的头部。
Raw Socket(原始套接字)
Raw Socket(原始套接字)实现Sniffer(嗅探) 一. 摘要  Raw Socket: 原始套接字  可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP... int sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); 这样我们就创建了一个 Raw So
libpcap抓包并分析
基于libpcap的数据包抓取 1.libpcap安装 前提安装gcc 然后安装输入如下命令: yum -y install flex yum -y install bison 在一个文件夹下下载libpcap源码并解压,在安装如下: wget -c http://www.tcpdump.org/release/libpcap-1.7.4.tar.gz 进入libpcap-...