我知道使用 tshark 和 tcpdump,我可以生成 pcap 文件。但为了运行该程序,我需要将 pcap 信息格式化为 json 格式。我在想是否可以使用 tcpdump 或 tshark 命令来实现它?
我正在 debian 平台(linux)上运行。
我试图在 tcpdump 中查看 TCP 重传数据包。
我找到了过滤同步数据包、ACK 数据包的命令,但无法找到重传数据包的过滤器
有没有什么命令可以过滤此类数据包。
提前致谢。
我有一个 DNS 服务器,我想捕获 DNS 流量以获取使用我的 DNS 服务器的所有 IP。
为此,我开始使用以下tcpdump命令并将它们捕获到文件中:
tcpdump -n -i eth0 dst port 53 >> dns_data.log
Run Code Online (Sandbox Code Playgroud)
但当我长时间运行时,文件大小会很大。我怎样才能将其捕获到压缩文件中?我尝试了下面的命令,但它不起作用。
tcpdump -n -i eth0 dst port 53 | bzip2 -c >> dns_data.bz2
Run Code Online (Sandbox Code Playgroud) 有人可以告诉我如何使用 tcpdump 过滤掉特定源和目标 IP 上的 udp 或 tcp 流量并将输出保存到 csv 文件中吗?如果我可以使用 etl 工具将 pcap 文件转换为 csv,则不需要 csv 文件。
另外,当我收集数据时,我对 100ms 时间分辨率感兴趣,我可以使用 tcpdump 来做到这一点吗?
谢谢。
我使用以下过滤器表达式来嗅探 IPv4/IPv6 SYN/ACK/FIN/RST 数据包。对于 IPv4 使用 tcpdump 效果很好,但是对于 IPv6 我没有看到任何东西
tcp 端口 80 和 (tcp[tcpflags] & (tcp-syn|tcp-ack|tcp-fin|tcp-rst) != 0)
我通过ssh登录虚拟机,并尝试在后台运行脚本,脚本如下所示:
#!/bin/bash
APP_NAME=`basename $0`
CFG_FILE=$1
. $CFG_FILE #just some variables
CMD=$2
PID_FILE="$PIDS_DIR/$APP_NAME.pid"
CUR_LOG_DIR=$LOGS_RUNNING
echo $$ > $PID_FILE
#Main script code
#This script shall be called using the following syntax
# $ nohup script_name output_dir &
TIMESTAMP=`date +"%Y%m%d%H%M%S"`
CAP_INTERFACE="eth0"
/usr/sbin/tcpdump -nei $CAP_INTERFACE -s 65535 -w file_result
rm $PID_FILE
Run Code Online (Sandbox Code Playgroud)
结果应该是 tcpdump 在后台运行,将命令结果重定向到 file_result。
该脚本的调用方式为:
nohup $SCRIPT_NAME $CFG_FILE start &
Run Code Online (Sandbox Code Playgroud)
并且它停止调用 STOP_SCRIPT:
##STOP_SCRIPT
PID_FILE="$PIDS_DIR/$APP_NAME.pid"
if [ -f $PID_FILE ]
then
PID=`cat $PID_FILE`
# send SIGTERM to kill all children of $PID
pkill -TERM …Run Code Online (Sandbox Code Playgroud) 是否有一个快速的tcpdump单行程序打印出与特定子字符串匹配的TCP流 - 或者,如果这不容易,那么打印出与子字符串匹配的单个TCP 数据包怎么样?
我写了一个简单的服务器和客户端应用程序,我可以在TCP,DCCP和UDP协议之间切换.目标是将文件从一个文件传输到另一个文件并测量每个协议的流量,因此我可以将它们与不同的网络设置进行比较(我大致知道结果应该是什么,但我需要精确的数字/图表).无论如何在不同的计算机上启动这两个应用程序并启动tcpdump后,我只能从tcpdump-log获取我的4GB文件中的前几个MB(~50MB).这些应用程序是用标准的C/C++代码编写的,可以在网络上的任何地方找到.可能是什么问题或者我在这里做错了什么?
- 编辑
我使用的命令行是:
tcpdump -s 1500 -w mylog
Run Code Online (Sandbox Code Playgroud)
tcpdump 仅在第一个~55秒内捕获数据包.这是客户端将文件发送到套接字所需的时间.之后它会停止,即使服务器继续接收文件并将文件写入硬盘驱动器.
- Edit2
源代码:
client.cpp
server.cpp
common.hpp
common.cpp
- 编辑最终
正如你们许多人指出的那样(而且我怀疑)源代码中存在一些误解/错误.在我清理它(或几乎重写了它)后,它可以根据需要使用tcpdump.我会接受@Laurent Parenteau的回答,但仅限于第5点.因为这是问题的唯一相关因素.如果有人对正确的代码感兴趣,那么它是:
源代码已编辑
我在C中编写一个程序来分析tcpdump捕获的数据包.在我的程序中,我popen用来打开一个tcpdump进程的管道,该进程捕获数据包并将原始数据转储到stdout,如下所示.
FILE *tcpdump = popen("tcpdump -s0 -w -", "r");
Run Code Online (Sandbox Code Playgroud)
但是,来自tcpdump的警告和错误消息将直接转到stderr,它将显示在控制台中.我想以某种方式隐藏这些,所以只显示我程序的输出.
我试过的一种方法是附加2>&1到tcpdump命令,但是我的程序必须区分tcpdump警告/错误和原始数据包数据.
是否有一种简单的方法可以使tcpdump的stderr输出静音?
我正在尝试创建一个程序,用于读取Mac OS X(当前版本10.9.5)上的UDP数据包的IP地址和端口(在本例中为localhost).
给我一些有用数据的唯一一个是tcpdump和nc(netcat),但它只工作了一次.这就是我所做的:
1°终端窗口
$ sudo tcpdump -i en0 -X -v 'udp port 60000'
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
* new packet with the string 'Hello' at the end *
Run Code Online (Sandbox Code Playgroud)
2°终端窗口
$ nc -u 192.168.1.67 60000
Hello
$
Run Code Online (Sandbox Code Playgroud)
我对这个论点没有太多的了解,所以最后的问题是:
如果我需要创建一个程序,需要读取给定端口号的任何UDP数据包并通过同一端口将UDP数据包发送到任何IP地址,那么最简单的方法是什么?我试图通过C使用libpcap,但没有成功.