linux mac帧发送,读取MAC帧并将其发送给Wiresh

只创建一个tap device并将框架写入其中如何?然后您可以像其他任何设备一样使用wireshark嗅探tap设备。在Python here中有一个使用tap设备的例子,在Chere中有一个较长的教程(实际上是关于tun设备的)。在

NB:我还没有测试过这个,但这个想法似乎很合理。。。在

更新:这似乎有效。这是基于上述要点,但是

只需从文件中读取帧数据并将其写入设备:import sys

import fcntl

import os

import struct

import subprocess

TUNSETIFF = 0x400454ca

TUNSETOWNER = TUNSETIFF + 2

IFF_TUN = 0x0001

IFF_TAP = 0x0002

IFF_NO_PI = 0x1000

# Open TUN device file.

tun = open('/dev/net/tun', 'r+b')

# Tell it we want a TUN device named lars0.

ifr = struct.pack('16sH', 'lars0', IFF_TAP | IFF_NO_PI)

fcntl.ioctl(tun, TUNSETIFF, ifr)

# Optionally, we want it be accessed by the normal user.

fcntl.ioctl(tun, TUNSETOWNER, 1000)

# Bring it up and assign addresses.

subprocess.check_call(['ifconfig', 'lars0', 'up'])

print 'waiting'

sys.stdin.readline()

# Read an IP packet been sent to this TUN device.

packet = list(open('/tmp/packet.raw').read())

# Write the reply packet into TUN device.

os.write(tun.fileno(), ''.join(packet))

print 'waiting'

sys.stdin.readline()

Linux平台上,获取网络发送以太网数据通常涉及到网络设备文件的操作,特别是使用内核的Netlink消息传递机制以及libpcap(预抓包捕获库)或者libnl(Linux网络命名空间库)。以下是基本步骤: **获取网络(网络嗅探)**: 1. 打开网卡设备:`open("/dev/net/tun", O_RDWR | O_NONBLOCK);` 2. 初始化PCAP句柄:`ifreq ifr; memset(&ifr, 0, sizeof(ifr));` 3. 设置接口参数:`ifr.ifr_name = "tun0";`(这里的"tun0"需要替换为实际的设备名) 4. 发送NETLINK_ADD message:`ioctl(fd, SIOCGIFINDEX, &ifr);` 5. 循环读取数据包:`while (true) { struct sk_buff *skb = read_frame(fd); process_packet(skb);}` **发送以太网数据**: 1. 创建一个新的数据包:`struct sk_buff *skb = alloc_skb(sizeof(struct ethhdr) + data_len, GFP_ATOMIC);` 2. 完成以太网头部:设置源MAC地址、目标MAC地址和IP协议类型 (`ETH_P_ALL`表示IP数据报) ```c struct ethhdr *eth = skb->data; eth->h_source = htons(src_mac); eth->h_dest = htons(dst_mac); eth->h_proto = htons(ETH_P_IP); ``` 3. 插入IP头部(如果需要)或其他高层协议头部 4. 设置数据长度:`skb_put(skb, data_len);` 5. 写入数据:`write_to_net_dev(skb, dev);` 或者 `sendto(sockfd, skb->data, skb->len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));` 注意:上述操作需要相应的权限,并且需要了解如何解析和构建各种网络协议的数据结构。此外,Linux内核模块开发知识也是必要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值