我想为无线流量编写一个实时分析工具.
有谁知道如何从C中的混杂(或嗅探)设备读取?
我知道您需要具有root权限才能执行此操作.我想知道是否有人知道这样做需要什么功能.正常的插座在这里似乎没有意义.
组成一个 3 服务架构和一个虚拟桥接网络,三个服务都附加在该网络上。我希望其中一个容器能够监听虚拟网络中的所有流量(混杂模式)。是否可以?我几乎尝试了所有方法,但似乎没有任何效果。
我试过的:
上述许多尝试导致容器的 eth0 接口“认为”它处于混杂模式,事实上 ifconfig 和 syslog(来自主机)都说它是,但容器仍然只能看到自己的流量。
我使用的是 Docker 1.11,容器内的基本映像是 Ubuntu 14.04:latest
下面列出了我的 docker-compose 文件提前致谢
docker-compose.yml
version: '2'
networks:
snort_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.19.0.0/24
gateway: 172.19.0.3
services:
mysql:
build:
context: .
dockerfile: MySql/MySqlFile
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
networks:
snort_net:
ipv4_address: 172.19.0.2
snort:
build:
context: .
dockerfile: Snort/SnortFile
depends_on:
- snorby
env_file:
- Snort/snort_variables.env
networks:
snort_net:
ipv4_address: 172.19.0.3
expose:
- "80" …
Run Code Online (Sandbox Code Playgroud) 我有一个使用 创建的套接字socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
,并使用以下命令将其设置为混杂模式:
struct ifreq ifr;
strncpy((char*)ifr.ifr_name, interface, IF_NAMESIZE);
if(ioctl(sock, SIOCGIFINDEX, &ifr)<0) fail(2);
struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifr.ifr_ifindex;
mr.mr_type = PACKET_MR_PROMISC;
if(setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) fail(2);
Run Code Online (Sandbox Code Playgroud)
问题是,当我read()
从套接字执行 a 时,它只返回来自或传入我的计算机的数据。
我怎样才能让它读取和处理网络上的所有数据包?
Wireshark 可以正常显示所有数据包,因此我知道这不是我的计算机或网卡。ifconfig
报告说它PROMISC
正在运行。
c ×2
linux ×2
containers ×1
docker ×1
networking ×1
raw-sockets ×1
security ×1
sockets ×1
wireless ×1