gpt4 book ai didi

pcap - netcat:监听并捕获TCP数据包

转载 作者:行者123 更新时间:2023-12-03 09:03:09 27 4
gpt4 key购买 nike

是否可以仅在已使用的端口上监听(而不是创建新连接)TCP 数据包,即将数据从路由器发送到服务器。

我知道以下内容在提到的端口上启动监听进程,并将其保存在 pcap 中文件:

服务器端:nc -l -p <port> > file_name.pcap

客户端:sudo tcpdump -s 0 -U -n -i eth0 not host <server_ip> -w file_name.pcap | nc <server_ip> <port>

但这会在给定端口上创建一个新连接并捕获与其相关的数据包。我想在已用于发送数据包的端口上捕获数据包。

最佳答案

Netcat 目前似乎不具备该功能(根据手册页)。


当监听时,netcat 通常会打开 socket AF_INET系列(网络层,即TCP/UDP)和SOCK_STREAM类型(双向连接)。相反,为了转储数据包,tcpdump 打开一个 AF_PACKET 系列套接字(设备驱动程序层)并键入 SOCK_RAW(直接访问接收到的数据包)。

您可以使用 strace 来观察这一点,以跟踪系统调用(此处为 socket 和后续的 bind)及其参数:

$ sudo strace -e trace=socket,bind nc -l 8888 
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
bind(3, {sa_family=AF_INET, sin_port=htons(8888), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
$
$ sudo strace -e trace=socket,bind tcpdump -w tmp.pcap
[...]
socket(PF_PACKET, SOCK_RAW, 768) = 3
bind(3, {sa_family=AF_PACKET, proto=0x03, if2, pkttype=PACKET_HOST, addr(0)={0, }, 20) = 0
[...]

您可以使用 SOCK_RAW 类型的套接字在设备驱动程序级别(如 tcpdump)或网络层转储流量。也就是说,您可以通过打开 AF_INET 系列套接字并输入 SOCK_RAW 来很好地检索通过 netcat 发送的文件,如 this blog post 中实现的那样。 .

关于pcap - netcat:监听并捕获TCP数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com