标签: scapy

SCAPY PYTHON - 获取 802.11 DS 状态

我正在尝试使用 SCAPY 创建一个嗅探程序来演示 802.11 设备关联 [s] 和 802.11 网络中的角色。

SCAPY 具有识别 Beacon 帧、探测请求和探测响应的简单功能。我正在尝试更深入地挖掘,并根据 DS 状态进行自己的评估,以显示所有其他流量关联 [s]。

我不能做什么决定了如何获得 DS 状态的值(00、01、10、11)。如果确定,那么我可以相应地处理帧以获得 SOURCE、BSSID、RECEIVER、TRANSMITTER 和 DESTINATION 以适合我的代码。

我发现我应该能够使用 tshark (wlan.fc.ds) 获取 DS 状态,因此,如果需要,我可以将帧传递给 tshark 派生进程;但我首先想尝试使用 SCAPY 来完成这一切,因为我刚刚开始使用 SCAPY 和 PYTHON 进行编码,我不想在第一个障碍时跳到其他 MAC 帧分析程序。

除了创建我的程序来演示设备关联;我还将它用作一种工具,让我了解更多关于 802.11、PYTHON 和 SCAPY 的信息,因此我希望深入研究每一帧,将它们按 DS 状态分组。谢谢,鲍勃

scapy wifi python-2.7

1
推荐指数
1
解决办法
2827
查看次数

使用多处理时未更新 Python 实例变量

我在更新变量方面遇到了一个不寻常的问题。我已经构建了一个简单的类对象来帮助我进行一些网络嗅探。我想做一个并行进程,它允许我运行一些网络测试并捕获使用 python 生成的流量,这样我就可以扩展程序来做一些了不起的事情。我正在使用 scapy 的嗅探功能来帮助进行界面嗅探。

Scapy 的嗅探器允许您将一个函数传递给它自己的函数,该函数允许您创建“停止嗅探”条件。在我的例子中,我已经创建了函数stop_filter,我希望通过简单地更新self.stop_sniffing实例变量来停止 Scapy sniff 函数。我在下面展示了程序输出,它显示self.stop_sniffing在 Function 中设置为 True stop,但在stop_filter. 我不知道为什么会发生这种情况,也没有想到解决方案,因为这是一个如此奇怪的问题。

如果任何有新鲜眼光的人都能看到我在这里做了什么疯狂的事情,将不胜感激!

from scapy.all import *
from multiprocessing import Process


class DatasetSniffer:
    def __init__(self, iface, local_dir='.'):
        self.iface = iface
        self.master = None
        self.local_dir = local_dir
        self.stop_sniffing = False # Never updates! why!?
        self.writer = PcapWriter(local_dir+"/master.pcap", append=True, sync=True)

    def stop_filter(self, p):
        # Note: 'p' gets passed in by Scapy function 'sniff'
        print self.stop_sniffing
        # Return 'True' to stop …
Run Code Online (Sandbox Code Playgroud)

python multithreading scapy

1
推荐指数
1
解决办法
1257
查看次数

如何提取 Scapy 中的原始负载?

有什么方法可以提取通过原始套接字解析的 Scapy 原始负载吗?我可以通过指定 ip[scapy.IP] 和 ip[scapy.TCP] 来提取 TCP 和 IP 标头,但不能指定原始负载。

当我尝试通过指定 ip[raw.load] 提取原始负载时,它给我一个错误,指出未找到原始图层。

这是我想要提取的原始负载的图像

import sys
import socket
from scapy.all import *
#from scapy import all as scapy



s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

while 1:
    packet = s.recvfrom(2000);
    packet = packet[0]
    ip = IP(packet)
    print(ip.show())
    #print(str(ip[IP]))
    #print(ip[scapy.IP].src)
    #print(ip[scapy.Raw].load)
Run Code Online (Sandbox Code Playgroud)

我可以使用此代码提取 Scapy TCP 标头中的源端口号。

import sys
import socket
from scapy.all import *
#from scapy import all as scapy



s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

while 1:
    packet = s.recvfrom(2000);
    packet = packet[0] …
Run Code Online (Sandbox Code Playgroud)

python scapy

1
推荐指数
1
解决办法
8189
查看次数

vscode 导入错误:从 scapy.all 导入 IP

vscode 说在 scapy.all 中找不到 IP 在此处输入图片说明

但是从终端,我可以导入它: 在此处输入图片说明

有人能告诉我为什么吗?

python scapy visual-studio-code

1
推荐指数
1
解决办法
2531
查看次数

如何在 Scapy 中以字节数组形式检索数据包有效负载?

我有一些代码尝试通过从数据包中获取字符串值(我相信它返回一个字节串作为字符串)来将数据包有效负载提取为字节数组。我怎样才能以字节数组的形式获取原始有效负载?

packets = rdpcap(pcapFile)
p = packets[0]

if TCP in p:
    pdata = str(p[TCP].payload)
elif Raw in p:
    pdata = str(p[Raw].load)
elif TLS in p:
    pdata = str(p[TLS].msg)
else:
    pdata = ""
Run Code Online (Sandbox Code Playgroud)

当我打印 pdata 时,它看起来像这样

b'\x17\x03\x01\x00 a\xb9j\x17#\xb9uX\xdf\xe3\x08\xe0\xbc\xc3\xce\xa2=\xda\xc9\xd7\x1d7*\xad\xc9Y\xcer1\xdc\xb2\xd1\x17\x03\x01\x00 
Run Code Online (Sandbox Code Playgroud)

但似乎,这是一个字符串,而不是字节串,ad pdata[0] 返回'b'

我怎样才能得到“有效负载”作为bytesbytearray

python scapy

1
推荐指数
1
解决办法
9085
查看次数

加速python循环处理数据包

我花了一整天等待一个循环,没有希望退出!我知道python在性能方面不是那么高效,我真的很感激任何加速建议来解决我的问题.

我使用wireshark捕获了大量数据包(大约500,000个)并将它们保存到.pcap文件中.之后,我使用Scapy rdpcap()函数从保存的文件中读取数据包,然后在循环中访问每个数据包以提取源IP地址.我的代码如下:

from scaly.all import *

srcList =[]
Packets = rdpcap("pcapfile")

for pkt in Packets:
    src = Packets[Packets.index(pkt)][1].src
    srcList.append(src)
Run Code Online (Sandbox Code Playgroud)

注意:我已经做了一些挖掘,我发现Cython用于加速嵌套循环,但老实说我不知道​​如何在我的情况下使用它.任何见解都会很棒

python performance scapy cython

0
推荐指数
1
解决办法
2088
查看次数

Scapy - 计算嗅探包的数量?

如何计算使用该数据包捕获的数据包数量

 packets = sniff(filter='udp and host fe80::xx:xx:xx:xx',count=0)
Run Code Online (Sandbox Code Playgroud)

功能?这可能吗?

编辑:

我实际上一直在尝试使用这个函数的prn:

def packetCount(packets): 
    global counter 
    counter += 1 
Run Code Online (Sandbox Code Playgroud)

我在程序开头定义了计数器变量.但我需要将它重置为0,每次嗅探().我尝试过的任何东西都无法工作......

python sniffing scapy

0
推荐指数
1
解决办法
5997
查看次数

无线数据包捕获scapy的帮助

我的代码我尝试过如下:

from scapy.all import *

def PacketHandler(pkt) :

       if pkt.haslayer == 2 and pkt.subtype==0:

          if pkt.haslayer(IP) :

             ip=pkt.getlayer(IP)
             print ip.dst

          if pkt.haslayer(UDP):
               udp=pkt.getlayer(UDP)
               print udp.dport
          if pkt.haslayer(TCP) :
               tcp=pkt.getlayer(TCP)
               print tcp.port

sniff(iface="mon0", prn=PacketHandler) 
Run Code Online (Sandbox Code Playgroud)

使用这个,我想捕获所有无线数据包,但我只获得多播(IP/UDP)数据包.那么如何才能在我的无线网络中获取所有DATA数据包?我已经在我的接入点上禁用了加密(暂时),因此我可以访问数据包中的数据.

python security wireless scapy intrusion-detection

0
推荐指数
1
解决办法
5791
查看次数

在python中的单个for循环中执行不同的函数

对于实例我在python中有三个函数和一个for循环,我希望顺序执行所有这些函数,例如在第一次迭代时应该执行函数1和在第二次迭代函数2上执行等等

这三个功能是:

    from scapy.all import *
from random import randint
import threading
import time
from datetime import datetime
import multiprocessing
from itertools import count

#pktList = []
#pktsInt = 0

#def Packets():
# Generate packet
    #for run_no in range(0,1)
p = raw_input('Enter PACKETs to send: ')
pktsInt = int(p)
pkts = IP(src="10.0.0.1",dst="10.0.0.2")/TCP()/"GET /HTTP/1.0\r\n\r\n"/Raw(RandString(size=120))
#print pkts
pkts[TCP].flags = "UFP"
pktList = []    
for pktNum in range(0,pktsInt):
    pktList.extend(pkts)
    pktList[pktNum][TCP].dport = 80 
    #randint(1,65535) # Pkt has Ran PortNo.
    print pktList[pktNum].summary()
    #print len(pktList[pktNum])
    #wrpcap('tcp-packets.pcap',pktList[pktNum]) …
Run Code Online (Sandbox Code Playgroud)

python traffic scapy python-2.7 python-3.x

0
推荐指数
1
解决办法
2208
查看次数

Sudo scapy 不适用于 virtualenv

刚开始在我的 virutalenv 中使用 scapy,但我无法在其中运行 'sudo scapy'。我正进入(状态:

sudo: scapy: command not found
Run Code Online (Sandbox Code Playgroud)

如果我只是运行 scapy,当我尝试发送一个简单的数据包时

send(IP(dst="www.google.com"/ICMP())
Run Code Online (Sandbox Code Playgroud)

我得到了permissionError 操作的许可。我如何让它工作?

python ubuntu sudo scapy

0
推荐指数
1
解决办法
2847
查看次数

如何解码 scapy Dot11 数据包中的数据

我正在编写一个程序来捕获 Dot11 数据包以进行网络安全测试,在这些捕获的数据包中,我获取的数据如下所示:

<RadioTap  version=0 pad=0 len=36    present=TSFT+Flags+Rate+Channel+dBm_AntSignal+b14+b29+Ext notdecoded=' \x08\x00\x00\x00\x00\x00\x00\xd5~\xbb*\x00\x00\x00\x00\x10\x02\x99\t\xa0\x00\xbd\x00\x00\x00\xbd\x00' |<Dot11  subtype=11L type=Management proto=0L FCfield=retry ID=14849 addr1=48:ee:0c:f4:b7:ea addr2=00:26:82:8e:9a:d4 addr3=48:ee:0c:f4:b7:ea SC=46176 addr4=None |<Dot11Auth  algo=open seqnum=1 status=success |<Dot11Elt  ID=220 len=46 info='7\x94' |>>>>
Run Code Online (Sandbox Code Playgroud)

我想更好地理解以下部分:

\x08\x00\x00\x00\x00\x00\x00\xd5~\xbb*\x00\x00\x00\x00\x10\x02\x99\t\xa0\x00\xbd\x00\x00\x00\xbd\x00
Run Code Online (Sandbox Code Playgroud)

我在许多不同的捕获中获得这些类型的数据包,我希望能够“解码”它们以读取数据。有没有办法做到这一点,也许是代码示例?

python networking scapy network-security

0
推荐指数
1
解决办法
5821
查看次数

如何使用 pyshark 从远程计算机上的本地托管网站获取数据包

我正在尝试使用 pyshark 从远程计算机上本地托管的网站(测试目的)获取数据包。

这是我的代码:

import pyshark

def print_live_dns():
   capture = pyshark.LiveCapture("wlan0")
   for packet in capture:
      # print(packet)
      with open('packets.txt', 'a') as f:
         f.write(str(packet))
      if "DNS" in packet and not packet.dns.flags_response.int_value:
         print(packet.dns.qry_name)

if __name__ == "__main__":
    print_live_dns()
Run Code Online (Sandbox Code Playgroud)

使用此代码,我只能从 Internet 获取数据包。这不是我需要的。我如何实现这一目标?使用pyshark, scapy, nmap

python scapy pyshark

-2
推荐指数
1
解决办法
110
查看次数