我正在编写一个Python程序,该程序需要在所有网络设备上聆听流量并根据其传入界面识别数据包.要聆听所有接口,我在没有指定设备的情况下启动了捕获,但是我无法表示特定数据包的界面.这是如何完成的? 解决方案 我假设Mac地址是您的足够信息. 数据包的前6个八位字是目标MAC地址,其后是源Mac地址的6个八位字. source
以下是关于 tcpdump 的编程技术问答
以下情况是:在我的情况下,我有3台计算机A,B和C. 计算机A将数据发送到计算机B.计算机B用PCAP捕获这些数据包,附加标题,重做校验和将其注入另一个以太网接口到计算机C.查看,数据来自计算机b. 我的问题是:按照TCPDUMP的教程解剖捕获的数据包,我学会了计算偏移并使用打字来获得以太网,IP和TCP标头结构.这样做的方法如下: ethernet = (struct sniff_ethernet*)(packet); ip = (struct sniff_ip*)(packet + SIZE_ETHERNET); size_ip = IP_HL(ip)*4; if (size_ip
我正在尝试识别我要收到的数据包的以太类型.以太类型ID为608,在Ethertype.h(libpcap 1.2.1)中没有相应的定义.收到的大多数数据包都有一种8种类型,在Ethertype.h中又没有相应的定义.有人对这可能是什么原因有什么想法,还是我应该通过错误报告与TCPDUMP联系. 解决方案 您要捕获的pcap_t上的返回值是多少? 如果不是DLT_EN10MB(具有值1),则您的数据包不是以太网数据包,而您不应该将其解析为以太网数据包. 如果是DLT_EN10MB,那是608还是十进制608?如果是十进制的608,则是一个长度字段,而不是类型字段.相同的8个,它是相同的十进制或十六进制,因此是长度值而不是类型值. 其他解决方案 来自manpage: " ntohs()函数将未签名的短整数网络从网络字节顺序转换为主机字节顺序." 来自我的代码: if(ntohs(ethernet-> ether_type)== 0x0800)..
目前我正在尝试编写一个快速的Python程序,该程序在.pcap文件中读取并写出有关存储在其中的各种会话的数据. 我写的信息包括SRCIP,DSTIP,SRCPORT和DSTPORT等. 但是,即使对于一个相当小的PCAP,这也需要大量的内存,最终运行很长时间.我们正在说8GB+的内存,用于212MB的PCAP. 像往常一样,我想可能有一种更有效的方法来做到这一点. 这是我的代码的快速骨架 - 没有重要的零件. import socket from scapy.all import * edges_file = "edges.csv" pcap_file = "tcpdump.pcap" try: print '[+] Reading and parsing pcap file: %s' % pcap_file a = rdpcap(pcap_file) except Exception as e: print 'Somethi
我正在使用Java从Wireshark获取的PCAP文件,而无需使用本机或就绪库. 我将字节转换为字符串直接以检查其有意义的部分. 然后,我尝试将其从十六进制转换为字符串.这不是有意义的. 有java库 jnetpcap 它正在包装所有libpcap库本机呼叫,该呼叫c. 以下图片将捕获无线网络.因此,PCAP包含相同的信息:源IP,目标IP,协议,长度和信息 我正在尝试获得相同的结果表格 pcap 文件,其中包含十六进制或二进制文件中的数据: d4c3 b2a1 0200 0400 0000 0000 0000 0000 0000 0400 0100 0000 2fd4 b355 2af8 0600 3600 0000 3600 0000 0100 5e00 0016 f409 d8ed d951 0800 46c0 0028 0000 4000 0102 4049 c0a8 0308 e000 0016 9404 0000 2200 fa02 00
我在DD-WRT路由器上运行TCPDUMP,以便从手机捕获上行链路数据.我只想听一些MAC地址.为此,我尝试使用类似于Wireshark的语法运行命令: tcpdump -i prism0 ether src[0:3] 5c:95:ae -s0 -w | nc 192.168.1.147 31337 以便我可以收听所有具有初始Mac地址的设备5c:95:ae. 问题是语法是错误的,我想知道你们中有人是否知道正确的语法来获得我想要的. 解决方案 使用man pcap-filter我找到了这个解决方案: tcpdump "ether[6:2] == 0x5c95 and ether[8:1] == 0xae"
我只想使用paramiko在后台运行tcpdump 这是代码的一部分: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host, username=login, password=password) transport = ssh.get_transport() channel = transport.open_session() channel.get_pty() channel.set_combine_stderr(True) cmd = "(nohup tcpdump -i eth1 port 443 -w /tmp/dump20150317183305940107.pcap) &" channel.exec_command(cmd) status = channel.recv_exit_status() 我执行此代
我正在尝试使用TCPDUMP显示在网络上流动的TCP数据包的内容. 我有类似的东西: tcpdump -i wlan0 -l -A -a选项将内容显示为ASCII文本,但我的文本似乎是UTF -8.有没有办法使用TCPDUMP正确显示UTF-8?您知道还有其他可以帮助的工具吗? 非常感谢 解决方案 确保您的终端支持输出UTF-8并将输出输送到替代不可打印字符的东西: tcpdump -lnpi lo tcp port 80 -s 16000 -w - | tr -t '[^[:print:]]' '' tcpdump -lnpi lo tcp port 80 -s 16000 -w - | strings -e S -n 1 如果您的终端不支持UTF-8,则必须将输出转换为受支持的编码.例如: tcpdump -lnpi lo tcp port 80 -s 16000 -w - | tr -t '[^[:print:]]' '' | iconv -
任何人都可以指导我转换KDD 99数据集,由以下格式组成的ip数据包至TCP dump格式? 0,udp,private,SF,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00,normal. 0,udp,private,SF,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,254,1.00,0.01,0.00,0.00,0.00,0.00,0.00,0.00,normal. 0,udp,private,SF,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,
我试图在端口3000上for fastify for https请求. Fastify是在端口3000上收听,但是当我尝试发送curl命令curl -k https://example.com:3000/ -v时,我会得到此 Trying 35.245.34.146... * TCP_NODELAY set * Connected to example.com (35.245.34.146) port 3000 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * error:1400410B:SSL routines:CONNECT_CR_SR
i有一个node.js客户端(10.177.62.7)从服务器(10.177.0.1)请求一些数据.客户端简单地使用node.js http.request()方法(agent = false).客户在Ubuntu 11.10框中. 为什么客户在475ms之后发送ACK?为什么这么慢?他应该立即派出Fin Ack.我有很多这样的情况.大约有1%的整个流量是要求延迟的FIN ACK. 客户端的CPU空闲约为99%,所以没有什么可以排出CPU. 如何调试这个?会是什么呢? 我需要调整任何SYSCTL选项吗? 在屏幕截图上第二列是数据包之间的经过的时间. 解决方案 此行为是通常,您应该将TCP_QUICKACK选项添加到因此,您要应用完整列表,带有解释性的列表
我使用了-r和-k选项,但是当我使用tcpdump捕获抽水流量以及我看到的数据包的数量似乎与我期望的数据包数不匹配时,它似乎无法正常工作.框架. 解决方案 首先确保您使用的是最新版本,可用在这里.您将需要使用-K和-Mbps(或-m)选项,例如: # tcpreplay -i eth7 -K --mbps 1000 smallFlows.pcap File Cache is enabled Actual: 14261 packets (9216531 bytes) sent in 0.073761 seconds. Rated: 124951275.0 Bps, 999.61 Mbps, 193340.65 pps Flows: 1209 flows, 16390.77 fps, 14243 flow packets, 18 non-flow Statistics for network device: eth7 Attempted packets:
我想使用一些参数运行tcpdump(仍然不知道要使用什么),然后加载stackoverflow.com页面. 输出应为HTTP通信.稍后,我想将其用作外壳脚本,因此,每当我想检查site site.com的HTTP通信时,我都可以运行script.sh site.com. HTTP通信应该足够简单.这样: GET /questions/9241391/how-to-capture-all-the-http-communication-data-using-tcp-dump Host: stackoverflow.com ... ... HTTP/1.1 200 OK Cache-Control: public, max-age=60 Content-Length: 35061 Content-Type: text/html; charset=utf-8 Expires: Sat, 11 Feb 2012 15:36:46 GMT Last-Modified: Sat
OS:Ubuntu 16.04 我使用Scapy数据包创建器工具创建了一些数据包.数据包的目标地址是我的本地主机(IE)127.0.0.1 while(True): packet = IP(src='127.0.1.1',dst="127.0.0.1")/TCP(dport=80)/"from scapy packet" send(packet) print "tcp sent" 现在,当我在计算机上运行tcpdump并在一段时间后停止时,捕获的数据包仅是过滤器接收的数据包数量的一半,但没有删除这些数据包.这是tcpdump的输出: sudo tcpdump -i any dst 127.0.0.1 OUTPUT: 119 packets captured 238 packets received by filter 0 packets dropped by kerne
我正在尝试获取每个数据包的源MAC地址,这些数据包被倾倒在网络上,不包括涉及主机计算机的任何数据包.我希望为了实现这一目标,我应该以Host的网络接口以滥交模式从TCPDUMP获取数据. 请注意,我不是 有兴趣获得完整的标头甚至链接级标头. -e选项不是我想要的.我只想要每个数据包的源MAC地址,而仅此. 这是我目前正在做的事情: sudo tcpdump -I -elt -i wlan0 not host 127.0.0.1 2>> /dev/null | sed 's/ .*//' 用127.0.0.1替换为本地网络接口的实际IP地址. 这在某些网络中效果很好,其中源MAC地址是TCPDUMP输出的第一条信息.不幸的是,这并不总是我的经验.看来Tcpdump 是协议 - 依赖性,因此在某些网络上是有不同的. 我想我可以重写我的sed命令,以便输出与Mac地址的第一个相匹配的项目: (?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F
我有一台Windowns 7机器,我在该机器上安装了虚拟框,其中我正在运行Ubuntu Virtual Machine. 在那台Ubuntu虚拟机上,我安装了Cassandra,并在默认端口9042上运行. 当我尝试使用VM内的客户端连接到我的Cassandra实例时,没关系.但是,如果我尝试从主机计算机(我的实际计算机,Windows 7)连接到它,我不能! 当我在Ubuntu VM上使用tcpdump时,它显示了以下内容: 14:22:29.340202 IP 10.0.2.2.63128 > 10.0.2.15.9042: Flags [S], seq 606528001, win 65535, options [mss 1460], length 0 14:22:29.340293 IP 10.0.2.15.9042 > 10.0.2.2.63128: Flags [R.], seq 0, ack 606528002, win 0, length 0 因此
如果我的开发机具有iptables对FORWARD的规则,那么这些数据包是否被TCPDUMP捕获?我之所以有这个问题,是因为我知道存在其他称为INPUT的链条,哪些链条将数据包过滤到应用程序,如果将数据包路由到FORWARD链条,它是否可以到达tcpdump app? 您是否可以对官方文档进行一些可靠的参考或表达解释的想法来解决这个问题? 解决方案 TCPDUMP捕获了来自硬件设备的流量. iptables在不同级别上处理网络帧. 因此,答案是否定的,TCPDUMP仅在通过网卡中通过时才能捕获流量. iptables可以在TCPDUMP正在监视的卡上吸收入口流量,但可能会将其发送到另一个未经TCPDUMP监视的网络卡上的出站. 请记住,TCPDUMP仅在通过网络卡时捕获流量.
我四处寻找tcpdump内部内容的文档,但我还没有找到任何东西.因此,我的问题是计算机上的侵入性tcpdump.如何评估专用于流量分析的资源数量(内存或CPU)? 解决方案 tcpdump是非常简单的工具,基本上是打开特殊类型的套接字 socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) 并写信将其获得的所有内容. 内核进行所有捕获并管理特殊的缓冲区,以存储用于TCPDUMP的数据包.如果缓冲区完整的数据包,则会掉落.缓冲区通过-b选项进行调节.大多数系统具有缓冲区的上限,〜2GB或类似的东西. 从CPU的角度来看,您需要计算电源复制所有数据2或3次,这通常不是问题,如果您无法捕获最可能的1GB链接,则应怪磁盘速度而不是CPU.对于10GB链接,可能是CPU问题和内存总线带宽问题,您可能需要一些优化. 其他解决方案 就我阅读而言,TCPDUMP消耗它有点变量,具体取决于您的要求. 要查看您的tcpdump流
我正在尝试使用TCPDUMP嗅探HTTP标头. 此过滤器运行良好,但我听不懂 (((ip[2:2] - ((ip[0]&0xf)>2)) != 0) 我已经搜索过它,但是我找不到任何有用的信息 这是整个tcpdump命令 sudo tcpdump -A 'dst [dest host] or src [src host] and tcp and (((ip[2:2] - ((ip[0]&0xf)>2)) != 0)' -i eth0 解决方案 获得HTTP标头的不是BPF过滤器,而是您的TCPDUMP命令上的" -a"开关. 您的TCPDUMP命令在某些目的地或ETH0上的某个源中寻找TCP流量,其中最终的BPF滤镜涉及导致总计非零的计算.使用" -a"选项,它将在ASCII中打印每个数据包减去其链接级别的标题. 我已经解释了以下计算,但我相信实
我设置了3个CentOS服务器,配置为192.168.1.0/24和30.0.0.0/24之间的路由器,但是ping无法通过. 我从server1尝试了ping 192.168.1.62,根据tcpdump在server3上,收到了ICMP请求,但不会生成ICMP响应. 23:36:06.436243 IP 30.0.0.2 > 192.168.1.62: ICMP echo request, id 23570, seq 2838, length 64 23:36:07.436212 IP 30.0.0.2 > 192.168.1.62: ICMP echo request, id 23570, seq 2839, length 64 设置 服务器 server1: eth0-30.0.0.2 server2: eth0-192.168.1.61 eth0:0-30.0.0.1 server3: eth0-192.168.1.62