首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法看到Wireshark看到的应用程序套接字上的数据包

问无法看到Wireshark看到的应用程序套接字上的数据包
EN

Unix & Linux用户
提问于 2018-01-17 04:09:50
回答 3查看 6K关注 0票数 10

使用Ubuntu 14

我有一个Linux机器,其中有两个接口: eth1: 172.16.20.1 ppp0: 192.168.0.2

ppp0连接到具有PPP接口(192.168.0.1)和广域网接口(172.16.20.2)的设备。我可以验证这个装置能达到172.16.20.1

我遇到的问题是,如果我在同一台机器上使用Python发送数据包:

client.py

代码语言:javascript
复制
import socket
cl = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
cl.sendto("Hello", ("172.16.20.1", 5005))

server.py

代码语言:javascript
复制
import socket
srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srv.bind(("", 5005))
while True:
    data, addr = srv.recvfrom(2048)
    print("Message: ", data)

脚本运行良好,但我看不到Wireshark上的数据包来自eth1 (只有当我选择在lo接口上捕获时才能看到它)。我假设操作系统已经检测到数据包是用于它的一个本地接口,而不是通过创建的192.168.0.2套接字发送它。

当我添加以下规则以防止这种情况发生时:

代码语言:javascript
复制
sudo ip route del table local 172.16.20.1 dev eth1
sudo ip route add table local 172.16.20.1 dev ppp0
sudo ip route flush cache

所发生的是:

  • 我可以看到现在到达eth1的Wireshark上的数据包,源地址是广域网的地址(172.16.20.2)
  • 在重新启动程序之后,我看不到server.py的任何输出。

忽略ppp0接口并使用两个ethx接口:如果我尝试在两台单独的机器(客户机和服务器)中运行程序(不应用规则),我可以看到到达Wireshark eth1的数据包,以及server.py上的输出。如果我尝试在两台独立的机器上运行该程序,并将上述规则应用于ppp0连接(我还没有删除它),我将无法再看到来自server.py的任何输出,但仍然可以看到到达Wireshark的数据包。我对TCP/IP协议栈的了解不是很好,但是看来链路层已经不再转发到应用层了?

EN

回答 3

Unix & Linux用户

发布于 2018-01-17 07:48:22

看起来链接层不再转发到应用层了。

链接层不是问题;它不受您的配置的影响。这是关于网络层(IP)的。

local表是内核确定包是否可以在本地传递的方法。如果删除IP地址,数据包将被路由或丢弃。

我想这只是因为MAC地址位于另一个系统的ARP缓存中。如果本地表中缺少地址,则接收系统不会响应ARP请求。

票数 0
EN

Unix & Linux用户

发布于 2019-09-17 11:59:33

确保接收到的数据包的UDP和IP4校验和是正确的。在wireshark中启用校验和计算,并检查是否捕获。

票数 0
EN

Unix & Linux用户

发布于 2023-02-15 14:42:52

在我的情况下,最初,我无法看到和捕获本地流量。

经过调查,根本原因是我在错误的网络接口上捕获了网络流量。

例如,我捕获eth0网络接口流量而不是loopback网络接口流量。

因此,要查看和捕获本地网络流量,您应该选择loopback或any来捕获所有可用网络接口的流量。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/417676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档