标签: scapy

为什么AP不显示?为什么我的MAC不匿名?

在此示例中,是用于为Proberequests创建应答机的代码。结果是 AP正在设备上显示。以下是我的代码。为了使它正常工作,我不得不进行一些更改。

import sys
import os
import time
from scapy.all import *
os.sys.path.append('/usr/lib/python2.7/dist-packages')

conf.iface = "wlan0mon" 

class ProbeRequest_am(AnsweringMachine):
    function_name = "pram"
        mac = "00:11:22:33:44:55"
    def is_request(self, pkt):
        return Dot11ProbeReq in pkt
    def make_reply(self, req):
        rep = RadioTap()
        rep /= Dot11(addr1=req.addr2, addr2=self.mac, addr3=self.mac, ID = RandShort(), SC= RandShort())
        rep /= Dot11ProbeResp(cap="ESS", timestamp=int(time.time()))
        rep /= Dot11Elt(ID="SSID",info ="Scapy !")
        rep /= Dot11Elt(ID="Rates", info=b'\x82\x84\x0b\x16\x96')
        rep /= Dot11Elt(ID="DSset", info=chr(10))
        return rep

ProbeRequest_am()()
Run Code Online (Sandbox Code Playgroud)

首先,AP在我拥有的任何设备上都不可见。但是输出与我的设备在家里寻找我的AP有关。AFAIK我的智能手机(iOS 12.2)不会将其实际的MAC用于Proberequest,并且该程序仅应对Proberequest作出反应。但这是运行脚本的输出(我的iPhone的实际MAC,但已更改为发布= d0:c5:f3:00:00:00):

RadioTap / 802.11 Management 4 d0:c5:f3:00:00:00 > ff:ff:ff:ff:ff:ff …
Run Code Online (Sandbox Code Playgroud)

python scapy wifi 802.11

9
推荐指数
0
解决办法
151
查看次数

Scapy以无阻塞的方式嗅闻

在阻止方式中,我可以这样做:

from scapy.all import *

sniff(filter"tcp and port 80", count=10, prn = labmda x:x.summary())
# Below code will be executed only after 10 packets have been received
do_stuff()
do_stuff2()
do_stuff3()
Run Code Online (Sandbox Code Playgroud)

我希望能够以非阻塞的方式用scapy嗅探数据包,如下所示:

def packet_recevied_event(p):
   print "Packet received event!"
   print p.summary()

# The "event_handler" parameter is my wishful thinking
sniff(filter"tcp and port 80", count=10, prn=labmda x:x.summary(), 
                                  event_handler=packet_received_event)

#I want this to be executed immediately
do_stuff()
do_stuff2()
do_stuff3()
Run Code Online (Sandbox Code Playgroud)

总结一下:我的问题非常清楚,我希望能够继续执行代码而不用阻止它的嗅探功能.一种选择是为此打开一个单独的线程,但我想避免它并尽可能使用scapy本机工具.

环境细节:

python:2.7

scapy:2.1.0

os:ubuntu 12.04 64bit

sniffing scapy python-2.7

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

scapy:发送数据包时不允许操作

我正在尝试用scapy学习一些数据包生成.它看起来很酷.根据一些文档我正在这样做:

l3=IP(dst="192.168.0.1", src="192.168.0.2", tos=(46 << 2))
Run Code Online (Sandbox Code Playgroud)

但只是为了得到以下错误信息:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 251, in send
    __gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose, realtime=realtime)
  File "/usr/lib/python2.7/dist-packages/scapy/arch/linux.py", line 307, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
  File "/usr/lib/python2.7/socket.py", line 187, in __init__
    _sock = _realsocket(family, type, proto)
error: [Errno 1] Operation not permitted
Run Code Online (Sandbox Code Playgroud)

以root身份运行scapy解决了这个问题.但这不是我想要的.是因为普通用户无法创建RAW套接字吗?如果是这样,有解决方案吗?

scapy

8
推荐指数
3
解决办法
1万
查看次数

Scapy在剧本中

我在scthon中使用scapy作为会话,但我想在脚本中使用它.为什么这样?我希望能够用来sys.argv指定要使用的IP地址以及使用其他模块.如何实现这一目标?

python scapy

8
推荐指数
1
解决办法
2万
查看次数

如何使用Scapy提取Raw数据包

我使用sniffscapy模块的功能.我filter和我的prn功能做得很好.但现在,我想提取RawTCP packet,并使用十六进制或二进制格式的处理.

以下是scapy中Packet Class 的文档.

我怎样才能做到这一点 ?

我试过print packet[Raw]但它似乎被转换为ASCII或类似的东西.我想用十六进制或二进制保存它.

python hex extract scapy

8
推荐指数
1
解决办法
2万
查看次数

在PyDev/LiClipse中使用root调试项目

对于我正在做的项目,它使用scapy和套接字,我需要能够以root身份进行调试.

我已经想出如何在没有系统请求许可的情况下以root身份启动解释器.我补充说:

user     ALL=(root) NOPASSWD:/home/user/git/Project/bin/python2.7
Run Code Online (Sandbox Code Playgroud)

/etc/sudoers.tmp.我使用的路径导致我正在为此项目使用的虚拟环境的python解释器.LiClipse项目也使用此路径.现在我只需要让LiClipse以root身份运行解释器,但我不想以root身份启动LiClipse.我只是希望它在调试时以root身份使用此解释器.我怎样才能做到这一点?

python debugging pydev root scapy

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

scapy中嗅探功能的过滤选项

我正在研究一种基于scapy的工具,我需要根据协议和目的地的IP地址来嗅探数据包

我想知道如何使用sniff()函数中的filter选项.我尝试在文档中使用格式,但大多数时候它会导致这样的问题. scapy中的sniff函数过滤器无法正常工作.

我使用的是

a=sniff(filter="host 172.16.18.69 and tcp port 80",prn = comp_pkt,count = 1)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python linux networking ethernet scapy

8
推荐指数
1
解决办法
2万
查看次数

从Python访问802.11无线管理帧

从Linux上的Python我想嗅探802.11管理'探测请求'帧.这可以从Scapy那样:

# -*- coding: utf-8 -*-
from scapy.all import *

def proc(p):
        if ( p.haslayer(Dot11ProbeReq) ):
                mac=re.sub(':','',p.addr2)
                ssid=p[Dot11Elt].info
                ssid=ssid.decode('utf-8','ignore')
                if ssid == "":
                        ssid="<BROADCAST>"
                print "%s:%s" %(mac,ssid)

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

或者像这样的tshark:

tshark -n -i mon0 subtype probereq -R 'wlan.fc.type_subtype eq 4' -T fields -e wlan.sa -e wlan_mgt.ssid
Run Code Online (Sandbox Code Playgroud)

我们可以重定向来自tshark的输出,并用一些Python啜饮它(不是很漂亮,但它可以工作).

但是,这两个选项都有GPL许可,这使得潜在的商业项目变得棘手.因此,我正试图在Python中找出针对此特定问题的"较低级别"解决方案.来自Google我已经设法找出了两个可能的方向:

  1. Pcap库:似乎有三个可用于Python的pcap库: pylibpcap,pypcappcapy.我不太确定如何将上述功能纳入这些功能.任何示例代码或解决方案都会很棒.

  2. 原始套接字:PF_PACKET:"数据包套接字用于在设备驱动程序(OSI第2层)级别接收或发送原始数据包.它们允许用户在物理层顶部的用户空间中实现协议模块."

听起来这可能是另一种选择,完全绕过pcap.我听说过这可能是一个更好的方法,消除了pcap库的开销.不过,我不知道从哪里开始解决这个问题.

任何帮助解决这个问题将不胜感激.

python linux scapy wifi tshark

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

Scapy中的3路握手

我试图在Scapy建立一个3路握手.使用以下代码,

#!/usr/local/bin/python

from scapy.all import *

sport = random.randint(1024,65535)

# SYN     
ip=IP(src='172.16.120.5',dst='172.16.100.101')
SYN=TCP(sport=sport,dport=443,flags='S',seq=1000)
SYNACK=sr1(ip/SYN)

# ACK              
my_ack = SYNACK.seq + 1
ACK=TCP(sport=sport, dport=443, flags='A', seq=1001, ack=my_ack)
send(ip/ACK)
Run Code Online (Sandbox Code Playgroud)

但是在服务器上,我只看到SYN_RECV,即使发送了返回SYN-ACK并且返回发送了ACK.这是服务器的捕获(172.16.100.101),

08:10:19.455038 IP 172.16.120.5.58972 > 172.16.100.101.https: S 1000:1000(0) win 8192
08:10:19.455343 IP 172.16.100.101.https > 172.16.120.5.58972: S 2541678705:2541678705(0) ack 1001 win 18484 <mss 1460>
08:10:19.545808 IP 172.16.120.5.58972 > 172.16.100.101.https: . ack 1 win 8192
08:10:24.015204 IP 172.16.100.101.https > 172.16.120.5.58972: S 2541678705:2541678705(0) ack 1001 win 18484 <mss 1460>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,SYN-ACK被发送两次,因此看起来服务器不喜欢最终的ACK.有任何想法吗 ?

编辑:

我也直接从python打印每个数据包的输出.请注意,这是针对不同的连接.

>>> SYN
<TCP …
Run Code Online (Sandbox Code Playgroud)

python scapy

7
推荐指数
2
解决办法
2万
查看次数

使用 scapy 解析 pcap 文件

我正在比较 scapy 和 dpkt 的速度。我有一个包含 pcap 文件的目录,我解析并计算每个文件中的 http 请求。这是 scapy 代码:

import time
from scapy.all import *

def parse(f):
 x = 0
 pcap = rdpcap(f)
 for p in pcap:
    try:
        if p.haslayer(TCP) and p.getlayer(TCP).dport == 80 and p.haslayer(Raw):
            x = x + 1
    except:
        continue
print x

if __name__ == '__main__':\

  path = '/home/pcaps'
  start = time.time()
  for file in os.listdir(path):
    current = os.path.join(path, file)
    print current
    f = open(current)
    parse(f)
    f.close()
 end = time.time()
 print (end - start)
Run Code Online (Sandbox Code Playgroud)

与 …

python parsing scapy python-2.7 dpkt

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

标签 统计

scapy ×10

python ×8

linux ×2

python-2.7 ×2

wifi ×2

802.11 ×1

debugging ×1

dpkt ×1

ethernet ×1

extract ×1

hex ×1

networking ×1

parsing ×1

pydev ×1

root ×1

sniffing ×1

tshark ×1