我正在使用我使用Scapy在Python编写的网络工具. 作为IDE,我正在使用Pycharm. 我的代码有效.因此,如果我运行它,一切都按预期工作. 我的问题是Pycharm给了我一些错误. 它标志着IP,TCP,Ether,... as Undefined Reference to ... 的所有用法 我代码的相关部分看起来像 #!/usr/bin/env python from scapy.all import * ... ... syn = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, seq=src_seq, flags="S") ... 我尝试了许多使用Google发现的东西,例如添加我的SRC文件夹作为源根,我刷新了所有可以找到并重新启动Pycharm的缓存,但没有任何可行的方法... 由于代码有效,这是一个小问题,但我仍然想让我的IDE按预期工
以下是关于 scapy 的编程技术问答
i创建类似Python-Scapy的AirPWN的程序.现在,我可以嗅探它并伪造802.11包,具体的任何要求的欺骗值并将其发送到受害者机器上,但行不通.我认为因为我在计算欺骗ACK数字方面做错了.请告诉我如何重新计算ACK数字或我想念的内容. #!/usr/bin/env python from scapy.all import * from scapy.error import Scapy_Exception import os import HTTP ##### Start promicuous mode with airmon-ng start wlan0 11 (airmon-ng start/stop interface channel) tmp=os.popen("iwconfig 2>&1 | grep ESSID | awk '{print $1}' | grep wlan | grep -v mon") wlan=tmp.read() wlan=wlan.rs
我有一个使用Scapy解析的PCAP文件, 我通过使用代码bellow 设法将有效载荷倾倒到六个 pkts = rdpcap('Sink.pcap') print hexdump(pkts[0][2].load) 我得到输出 0000 00 00 00 *01* 58 2F AC 47 01 D8 1E 5F 00 00 00 01 ....X/.G..._.... 0010 00 0A 5E 32 08 00 08 00 08 00 08 00 08 00 08 00 ..^2............ 0020 08 00 08 00 08 00 08 00 08 00 08 00 08 00 08 00 ................ 0030 08 00 08 00 08 00 08 00 08 00 08 00 ............ None 我想做的就是例如仅打印第四字节(0x01).
我有多个文本文件,我以前通过TCPDUMP捕获了该文件,但是我没有正确设置配置,因此我没有完整的转储将其转换为PCAP文件,借助Text2PCAP.因此,我试图编写一个Python脚本以将我的文本文件转换为PCAPS. 以下是我捕获的文件的样子: tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 1509471560.944080 MAC1 > MAC2, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 23237, offset 0, flags [DF], proto TCP (6), length 60) IP1.port > IP2.port: Flags [S], cksum 0x6d2f (incorrect -> 0x0b4a), seq 1127096708, win 655
目前我正在尝试编写一个快速的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
在正常的浏览会话中,我想在浏览器收到之前编辑特定的JavaScript文件,因为一旦到达那里,就无法编辑.有什么工具吗?对于我需要的东西,我不能只保存它并在磁盘上进行编辑. 我准备自己自己编程,但是如果有人可以指出我要做的事情或多或少,我将非常感激.我必须拦截数据包,直到将整个文件放置在阻止浏览器的任何部分时,然后手动编辑并将其转发到同一端口. 我认为我只能使用PCAP来做到这一点,我已经阅读了一些有关Scapy的信息,但是我不确定它是否可以帮助我. 预先感谢. 解决方案 如果您很乐意将文件替换为本地文件,那么我会*使用 charles 及其映射到本地功能. 实际上,"做".这帮助我通过浏览器和昨天无法编辑的JS文件调试了问题. 其他解决方案 您需要实现某种代理,或将其挂接到现有的代理中,并在下载文件并替换文件时拦截该文件. 对于初学者而言并不小,而是一个好的学习项目. 其他解决方案 您可能可以通过使用Firefox Firebug插
我想使用Python/Scapy通过PCAP文件包进行迭代.该文件具有多个协议.当前迭代是特定于协议的,因此,如果下一个数据包来自另一个协议,则迭代会产生"跳跃".我不知道为什么现在这样.无论哪种协议,我都想要数据包的数据包. 小示例: data = 'new.pcap' zz = rdpcap(data) sessions = zz.sessions() for session in sessions: for packet in sessions[session]: eth_src = packet[Ether].src eth_type = packet[Ether].type if eth_src == "00:22:97:04:06:b9" and eth_type == 0x8100: # do anything elif eth_src == "00:22:97:04:06:b9" and eth_type == 0x
我正在使用rdpcap SCAPY的函数读取PCAP文件. 我还使用链接到scapy in scapy 在我的情况下是需要的,因为我必须检索所有HTTP请求和响应及其相关数据包. 我注意到解析大型PCAP文件rdpcap函数需要太多时间来读取它. 是否有一个解决方案可以更快地读取pcap文件? 解决方案 Scapy有另一种方法sniff您也可以使用它来读取PCAP文件: def method_filter_HTTP(pkt): #Your processing sniff(offline="your_file.pcap", prn=method_filter_HTTP, store=0) rdpcap将整个PCAP文件加载到内存.因此,它使用了很多记忆,正如您所说的那样慢. sniff一次读取一个数据包并将其传递给提供的prn函数.该store=0参数可确保将数据包处理后立即从内存中删除. 其他解决方案 我同意加载时间比人们预期
我正在尝试使用Scapy读取PCAP文件 from scapy.all import * logfile = rdpcap('./Pcap/112400.pcap') print(logfile) 输出 pcap: TCP:0 UDP:0 ICMP:0 Other:313 现在,当我在Wireshark中打开相同的文件时,我可以在协议列中看到,并且在下面的信息列下方,数据存在 `309 14:48:49.054000 2409:4040:f11:6385::fca:8000 2405:200:1601:c6e2:49:40:6:206 TCP [TCP Keep-Alive ACK] 59275 → 1883 [ACK] Seq=329 Ack=9 Win=23032 Len=0 如何使用Scapy PLZ指南捕获此信息? 解决方案 可能是您想要的是创建一个列表,您可以在其中进一步处理单个数据包. from scapy.al
Scapy具有sendpfast函数,可使用TCPREPLAY发送数据包.但是,此功能首先创建一个临时的PCAP文件,然后在其中调用TCPREPLAY.这增加了太多的延迟.无论如何,是否可以绕过它并直接将数据发送到TCPREPLAY.我知道TCPreplay可以读取STDIN的数据. 上下文:我想每秒生成大型流量(使用不同的SRCIP),然后通过网络发送.一种选择是在巨型PCAP文件中使用时间戳保存所有流量并运行TCPREPLAY.另一个选择是每秒发送数据. 解决方案 不确定是否避免临时文件是否足够,但是仍然是一种方法: #! /usr/bin/env python from scapy.all import * def pkt2pcap(p): sec = int(p.time) usec = int(round((p.time-sec)*1000000)) s = str(p) caplen =
我有一些PCAP文件,我想按协议过滤,即,如果我想通过HTTP协议过滤,则除了HTTP数据包以外,其他任何内容都将保留在PCAP文件中. 有一个工具,称为 opendpi ,这对于我需要的是完美的,但是没有包装器可用于python语言. 有人知道有什么可以做我需要的python模块吗? 谢谢 编辑1: HTTP过滤只是一个示例,我想过滤很多协议. 编辑2: 我尝试了Scapy,但我不知道如何正确过滤.该过滤器仅接受伯克利数据包滤波器表达式,即我无法使用上层的MSN或HTTP或其他特定过滤器.谁能帮我吗? 解决方案 使用Scapy的快速示例,因为我只是写了一个: pkts = rdpcap('packets.pcap') ports = [80, 25] filtered = (pkt for pkt in pkts if TCP in pkt and (pkt[TCP].sport in ports or pkt[T
我试图通过SCAPY发送先前记录的流量(以PCAP格式捕获).目前,我被困在条纹原始以太层上.流量是在另一个主机上捕获的,我基本上需要更改IP和Ether Layer SRC和DST.我设法替换了IP层并重新计算校验和,但是以太层给了我麻烦. 任何人都有从捕获文件中重新升级数据包的经验,并具有对IP和以太层(SRC和DST)更改的更改?另外,捕获是GB的差异很大,这种交通量如何? 如何? 解决方案 检查此示例 from scapy.all import * from scapy.utils import rdpcap pkts=rdpcap("FileName.pcap") # could be used like this rdpcap("filename",500) fetches first 500 pkts for pkt in pkts: pkt[Ether].src= new_src_mac # i.e new_src_mac="00:1
我想使用Scapy从我拥有的PCAP文件中解析我的GTP数据包.我能够使用SCAPY解析普通的UDP/TCP数据包.例如,如果我的数据包是udppacket,则 udppacket[3] 向我展示了UDP数据包的数据部分.对于GTP数据包,它具有更多的层,并且数据包在UDP层之后,并且数据在最后一层.因此,如果我的GTP数据包是GTPPACKET,则 gtppacket[4] 给我错误,说indexError:找不到第4层.实际上,如果我使用 gtppacket[3] 然后,我可以看到数据以及其他层中的其他信息.因此,我有什么办法可以在GTPPACKET的第3层中穿越并仅访问我感兴趣的部分.我需要从第3层提取的数据总是在恒定偏移之后.以下是Hexdump的输出(GTPPACKET [3]). 0000 30 FF 00 B6 F8 8E EA 50 45 00 00 B6 04 D2 40 00 0......PE.....@. 0010
不管我是否做 scapy 或 Python from scapy.all import * 它只是崩溃了.它说" python没有回应",这无用的经典小酒吧.我目前正在Win10. 我发现只有另一个人有这个问题,没有人愿意回答他,找不到其他任何东西.我尝试了来自包装不同的安装程序的多个安装程序.没有可以.我要疯了. 非常感谢. 解决方案 好吧,没有人提出答案,但是我终于弄清楚了,所以在奇怪的机会中,有人最终处于同一困境中,这就是我的工作方式: 确保已安装Windows的周年更新,并启用Beta(或者在阅读此书时不再是?)Linux bash(快速谷歌搜索将向您显示如何执行此操作,没有什么特别的要做,只有一个很少有选项可以打勾,HowtoGeek如果可以帮助您搜索). 您必须重新启动计算机.然后,您应该能够在窗户上打开Ubuntu Bash. 访问Scapy安装网站,然后转到"本地Linux Linux " 部分.在此之前,我亲自卸载了
我编写了此代码以获取HTTP标头并设置主机: http_layer = packet.getlayer(http.HTTPRequest).fields http_layer['Host'] = "newHostName" return packet 运行了相关代码后,新的主机名已正确设置,但是问题是当我在PCAP文件中编写数据包时,我仍然在HTTP Fields中看到上一个主机, 有没有一种操纵http_layer['Host']的绝对方法? 任何帮助,将不胜感激. 问候. 解决方案 毕竟,找到了答案. 关键是scapy首先解析HTTP Request并显示其字段的dist.因此,当我们尝试分配一个新字段(例如Host)时,它会更改Host它已经解析并且不会更改原始字段值. 因此,这是修改Host或任何其他各个字段的方法: str_headers = pkt['HTTP']['HTTP Request'].fields['Headers'] str_header
我已经构建了一个用scapy构建的数据包: a=IP(dst='192.168.0.1',proto=1)/'\x08\x00\xf7\xff\x00\x00\x00\x00' 我运行: send(a) Wireshark向我展示了192.168.0.1的ping请求和ping响应 没有警告,所有字段都是正确的 但是当我尝试时: b=sr1(a) 然后Scapy无法得到答案(Wireshark再次向我展示了请求和答复) 我该怎么办? 解决方案 问题是scapy不知道如何识别响应,因为您诚实地以困难的方式构建了ICMP数据包.如果您使用ICMP()构建它,它将起作用... >>> from scapy.all import ICMP, IP, sr1 >>> aa = IP(dst='192.168.0.1')/ICMP() >>> sr1(aa) Begin emission: Finished to send 1 packets.
我目前正在处理一个程序,该程序使用.PCAP文件,并使用SCAPY软件包将所有数据包分开.我想解压缩使用GZIP软件包压缩的有效载荷.我可以判断有效载荷是否为GZZ,因为它包含 Content-Encoding: gzip 我正在尝试使用 fileStream = StringIO.StringIO(payload) gzipper = gzip.GzipFile(fileobj=fileStream) data = gzipper.read() 解压缩有效载荷, payload = str(pkt[TCP].payload) 当我尝试这样做时,我会得到错误 IOError: Not a gzipped file 当我打印第一个有效载荷时,我会得到 HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: text/html; charset=utf-8 P3P: CP="
我正在使用Scapy重播一些我更改TTL值的抛弃数据包.即使TTL = 1,我也会得到非常奇怪的结果. 当我彼此分开测试时间时,我可以通过ICMP时间超过的消息从大约40%到95%的数据包回复.然后,我可以递归地重播未解决的数据包,并每次或多或少地获得与以前相同的答案数据包的百分比. 为什么? 我一直在彼此之间以0.1秒的间隔发送数据包.这应该可以,对吗?我的超时价值是10,应该非常保守. 这里怎么了? 解决方案 您所说的本质上是您只能在给定的时间内测试如此多的无法实现的主机.一个可能的原因:许多路由器速率限制ICMP消息. 在做其他事情之前,要测试ping成功的ping成功.这样,您就可以积极确认可及性.缺点是MS Windows Blocks PINGS. 如果您不能首先ping,则需要增加探针之间的时间,或在返回ICMP消息的路由器上提高ICMP无法达到的速率. 编辑: 根据评论,似乎您正在为scapy处理流量的能力撞墙.过去