- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果我运行:
iperf -s -u -B 224.0.31.155
然后运行
sudo tcpdump -ni any 'host 224.0.31.155'
tcpdump 能够捕获一些东西:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
15:49:15.334484 IP [some ip].14386 > 224.0.31.155.14386: UDP, length 1364
15:49:15.334728 IP [some ip].14386 > 224.0.31.155.14386: UDP, length 1374
15:49:15.375026 IP [some ip].14386 > 224.0.31.155.14386: UDP, length 1058
15:49:15.375184 IP [some ip].14386 > 224.0.31.155.14386: UDP, length 832
但是,如果我终止上面的 iperf 进程,然后启动也加入同一组并绑定(bind)同一端口的 C++ 应用程序,tcpdump 将不再看到流量。
这是片段:
struct sockaddr_in mc_addr; /* socket address structure */
struct ip_mreq mc_req; /* multicast request structure */
unsigned int from_len = sizeof(mc_addr); /* source addr length */
/* construct a multicast address structure */
memset(&mc_addr, 0, from_len);
mc_addr.sin_family = AF_INET;
inet_aton(mcastGroup.c_str(), &mc_addr.sin_addr);
mc_addr.sin_port = htons(port);
/* bind to multicast address to socket */
if (bind(s, (struct sockaddr *) &mc_addr, sizeof(mc_addr)) < 0) {
std::cerr << "failed to bind to the port " << port << "|error="
<< strerror(errno) << std::endl;
throw;
}
/* construct an IGMP join request structure */
mc_req.imr_multiaddr.s_addr = inet_addr(mcastGroup.c_str());
mc_req.imr_interface.s_addr = htonl(INADDR_ANY);
/* send an ADD MEMBERSHIP message via setsockopt */
if ((setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*) &mc_req,
sizeof(mc_req))) < 0) {
std::cerr << "failed to set socket option to request for membership"
<< std::endl;
throw;
}
tcpdump 详细信息:
$ tcpdump --version
tcpdump version 4.1-PRE-CVS_2012_03_26
libpcap version 1.4.0
我刚刚在我的一台生产服务器上检查过它,它显示了相同的行为,但我发现我的 C++ 应用程序正在正确处理数据。
知道发生了什么吗?
最佳答案
代码中的一个潜在问题是您将套接字绑定(bind)到多播地址。这不是必需的,可能会导致各种奇怪的行为。
如果您只想发送 UDP 数据包,您根本不需要绑定(bind)您的套接字。操作系统会为您完成。
如果你想发送和接收多播流量,你很可能想绑定(bind)到 Linux 上的 INADDR_ANY。这几乎是一个成语。 UDP 套接字上的 bind()
在 Linux 上具有非常不直观的语义。 IP地址只是起过滤作用。它既不绑定(bind)到指定的 IP 地址,也不绑定(bind)到与该 IP 地址关联的接口(interface)。
另一件奇怪的事情是,您分配给 mc_req.imr_interface
,它不应该是 ip_mreq
的成员。我认为这应该是 mc_req.imr_address
,但当然如果编译成功,我将保持沉默。
关于c++ - tcpdump 没有为我的 C++ 应用程序显示任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694024/
如何告诉tcpdump解析名称并保留未解析的端口号? 来自人: -n Don’t convert host addresses to names. This can be used to a
我正在使用 tcpdump 通过 wlan0 收集数据包数据。但是我发现很多数据包的长度为 0,如下图所示。嗯,长度为 0 的数据包...... tcpdump 可靠还是我错过了什么? 最佳答案 好的
运行“tcpdump -w 1.pcap”时需要限制文件大小。我尝试使用键“-C”来执行此操作,但是当我添加它时,我收到错误“权限被拒绝”。所以: > sudo tcpdump -w 1.pcap t
我正在通过网络适配器捕获 tcp/udp 数据包,并尝试分析数据包以获得一些统计指标,例如带宽速率或协议(protocol)效率。无论如何,我需要使用一些 CLI 工具来监视特定链路(源、目标、端口,
使用 tcpdump 在接口(interface)上捕获 LLDP 数据包的格式是什么? 我尝试了以下格式,但它不起作用: tcpdump -w test.pcap -i eth0 lldp -vv
我想使用 tcpdump 捕获网络流量,如果捕获的数据包增加为 10mb,我想创建另一个文件。我如何使用 tcpdump 安排此操作。请善意地帮助我。谢谢。 最佳答案 tcpdump -W 5 -C
使用 tcpdump 时,我似乎无法看到捕获的所有数据。具体来说,我似乎从帧头丢失了 6 个字节,我想知道是否有人可以解释原因。 为了说明这一点,我在 VMWare 上以仅主机网络配置设置了一个 Ub
我在使用 Android 应用程序中的 TCPDump 时遇到问题。它应该逐行读取 tcpdump 的输出并在我的应用程序中处理它。 问题是: 有时代码工作正常,它会立即读取捕获的数据包。但有时,Re
我都使用过,我的结论是我可以使用 tcpflow 从网页中读取 html 数据,但不能使用 tcpdump 这样做。我得到的最好的结果是一些丑陋的 ASCII 文本,其中有很多句点符号。 我的理解是
我需要在我的 Android 设备上执行 tcpdump 跟踪。 我的设置: 将tcpdump文件推送到sdcard adb push filepath/tcpdump /sdcard/tcpdump
我的电脑上有两个网络接口(interface)。 netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-
Linux中是否有诸如tcpdump之类的实用程序来捕获通过RDMA channel 传输的流量? (Infiniband/RoCE/iWARP) 最佳答案 旧线程,但仍然: 正如Roland指出的那
我有一个巨大的pcap文件(100GB),我对一小部分数据包感兴趣,我知道这些数据包的数量为5,000,000至5,000,020。 如何使用tcpdump读取pcap文件,按数据包编号(或范围)过滤
如何使用 tcpdump 捕获以太网帧并显示本地 PC 使用 UDP、ARP 和 ICMP 协议(protocol)之一发送或接收的任何帧。 我正在尝试这个命令: sudo tcpdump -e ud
我正在使用 tcpdump 捕获网络数据包,当我开始丢弃数据包时遇到问题。我运行了一个通过网络快速交换数据包的应用程序;导致网络带宽较高。 >> tcpdump -i eno1 -s 64 -B 91
是否可以指定tcpdump 测量接收和发送数据包的时间?我知道命令 tcpdump -c 100 指定 tcpdump 在收到 10 个数据包后应该停止。我想指定 tcpdump 在例如 5 分钟后停
运行以下命令时出现错误: sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump* 这提供了以下错误: Failed to set cap
我可以为dst指定1个以上的tcpdump IP地址吗? 如果没有,如果我只想要两个特定目的地的流量,该如何很好地过滤信息? 非常感谢你! 最佳答案 是的,您可能有一个过滤器,其中包含多个通过“或”连
我正在寻找在 openwrt 上运行的 tcpdump 二进制文件。该网站仅显示必须构建的源代码。有人指向我包含预构建二进制文件的位置吗?谢谢。 最佳答案 我建议建立一个工作存储库,即: https:
在服务器 # nc -lp 2424 hi server hi client 1 2 3 在客户端 ➜ ~ nc 139.224.xxx.xx 2424 hi server hi client 1
我是一名优秀的程序员,十分优秀!