标签: scapy

Python:Scapy:如何读取 IP 标志

我试图弄清楚如何使用 scapy 库读取 IP 标志(而不是 TCP)。我知道它存储在“flags”中,并且是 FlagsField 类型。根据IP协议规范,有3个标志R、MF和DF。我搜索了又搜索,但找不到任何有关如何读取这些标志的信息。有任何想法吗?

谢谢大家的意见。

python ip scapy

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

关于 ICMP“需要分段,DF 位设置”或 ICMP 数据包太大消息

我将 ICMP“需要分段,设置 DF 位”注入服务器,理想情况下服务器应开始发送 ICMP 中“下一跳 MTU”字段中提到的大小的数据包。但这是行不通的。

这是服务器代码:

#!/usr/bin/env python 
import socket               # Import socket module
import time
import os

range= [1,2,3,4,5,6,7,8,9]
s = socket.socket()         # Create a socket object
host = '192.168.0.17'                   # Get local machine name
port = 12349               # Reserve a port for your service.
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))        # Bind to the port
rand_string = os.urandom(1600)

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print …
Run Code Online (Sandbox Code Playgroud)

networking tcp scapy icmp

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

Scapy - 在其他两个层之间插入数据包层

我正在使用 python 的 scapy 库做一个小网络项目。我的项目涉及嗅探数据包,并在第 3 层和第 4 层之间填充一个新层。

使用本指南,http://www.secdev.org/projects/scapy/doc/build_dissect.html

我能够创建一个新的数据包层。我可以通过执行以下操作轻松地将图层添加到现有数据包的顶部,

packet = newlayer()/packet
Run Code Online (Sandbox Code Playgroud)

而 newlayer() 层将被放置在 IP 层之下。但是,我想将这个新层夹在第 3 层和第 4 层之间(而不是就在 IP 之下)。但我似乎无法找到一种简单的方法来实现这一点。

我知道我可以创建一个新数据包并执行类似的操作,

packet = Ether()/IP()/newlayer()/TCP()
Run Code Online (Sandbox Code Playgroud)

但是,因为我想将该层插入到我已经嗅探过的数据包中,所以我想简单地修改原始数据包,而不是从头开始创建一个新数据包。

任何帮助,将不胜感激!

python sockets networking scapy packet

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

Python Scapy vs dpkt

我试图Scapy从一开始就使用Python来分析数据包.在最近的搜索中,我发现python中有另一个名为的模块dpkt.使用此模块,我可以解析数据包的各个层,创建数据包,读取.pcap文件并写入.pcap文件.我发现他们之间的区别是:

  1. 缺少实时数据包嗅探器 dpkt

  2. 某些字段需要使用struct.unpackin 解压缩dpkt.

我还缺少其他差异吗?

python scapy dpkt

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

Scapy TCP RST 攻击

我试图用 Scapy 编写 TCP RST 攻击,但我的代码不起作用。请帮助我解决我的问题。

     from scapy.all import *

     def poison(packet):
         packet[TCP].flags='RST'
         sendp(packet)

     sniff(filter='tcp',prn=poison)
Run Code Online (Sandbox Code Playgroud)

有问题flags,我想。有一个错误:

回溯(最近一次调用):
文件“Univer.py”,第 6 行,在 sniff(filter='tcp',prn=poison)
文件“/usr/lib/pymodules/python2.6/scapy/sendrecv.py”中,第 559 行,嗅探 r =
prn (p)文件“Univer.py”,第 3 行,毒包[TCP].flags='RST'
文件“/usr/lib/pymodules/python2.6/scapy/packet .py”,第 186 行,在 setattr self.setfieldval(attr,val)
文件“/usr/lib/pymodules/python2.6/scapy/packet.py”,第 175 行,在 setfieldval self.fields[attr] = any2i (self, val)
文件“/usr/lib/pymodules/python2.6/scapy/fields.py”,第 785 行,在 any2i y |= 1 << self.names.index(i)

值错误:未找到子字符串

python tcp scapy

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

Python Scapy - 拦截并修改localhost上的http数据包

我在localhost上运行apache2,我想截取并修改来自localhost的http请求.通过修改我想将标题的Accept-Encoding属性更改为'identity'.使用Burp-Suite,它工作得很好.但是,使用我的scapy脚本似乎已经发送了数据包,因为http响应仍然是编码的.

scapy脚本:

from scapy.all import *

def intercept(pkt):

   if pkt.haslayer(Raw):
      http_content = pkt.getlayer(Raw).load

      http_content = http_content.replace("Accept-Encoding: gzip, deflate", "Accept-Encoding: identity")
      pkt[Raw].load = http_content         
      print pkt.show()
      send(pkt)

def main():
   sniff(iface='lo', filter='tcp port 80', prn=intercept)

if __name__ == '__main__':
   main() 
Run Code Online (Sandbox Code Playgroud)

这就是我作为回应得到的回复:

<skipped>
###[ Raw ]###
           load      = 'HTTP/1.1 200 OK\r\nDate: Thu, 11 Aug 2016 09:34:38 GMT\r\nServer: Apache/2.4.23 (Debian)\r\nLast-Modified: Thu, 11 Aug 2016 09:34:25 GMT\r\nETag: "7d-539c878b8f8fd-gzip"\r\nAccept-Ranges: bytes\r\nVary: Accept-Encoding\r\nContent-Encoding: gzip\r\nContent-Length: 103\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xb3\xc9(\xc9\xcd\xb1\xe3\xb2\xc9HML\xb1\xe3RPP\xb0)\xc9,\xc9I\xb5\xf3H\xcd\xc9\xc9W\x08\xcf/\xcaI\xb1\xd1\x87\x08q\xd9\xe8CT\xd9$\xe5\xa7TB\x14g\x18!\xabT\x04\xaa0\x82H\x14@\xc5\x13\xd3\x133\xf3\xf4\xf4\xf4l\xf4\x0b@\x06@t\x02\x95\x81m\x05\x00\x1c\x95F\x1d}\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

这是编码的.

有人可以帮忙吗?

http code-injection scapy intercept

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

Python扫描WiFi

我正在搜索可以扫描WiFi网络并打印所有SSID的程序.我尝试用scapy,但我失败了.我正在使用pyCharm编辑器.

我试过这段代码:

from scapy.all import *
from scapy.layers.dot11 import Dot11

def packet_handler(pkt):        
    if pkt.haslayer(Dot11) and pkt.type == 2:        
        print(pkt.show())
scapy.sniff(iface="mon0", prn=packet_handler)
Run Code Online (Sandbox Code Playgroud)

python sniffer scapy wifi python-3.5

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

Scapy模块阻止PyCharm调试器

我正在PyCharm的一个项目,我需要调试代码的某些部分.

当我尝试调试时,调试器只是"跳过"断点而不停止它们.在网上进行了很多无用的尝试之后,我发现当我导入Scapy模块时,调试器不起作用,并且当没有导入Scapy时,一切都运行起来很精细.

顺便说一句 - 我在Ubuntu OS上工作.

有任何想法吗??

python import ubuntu scapy pycharm

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

将原始 Scapy 数据解码为人类可读

我正在尝试改用 Scapy 而不是 Wireshark,但是在解码我获得的数据时遇到了问题。在 Wireshark 中,我可以很容易地看到标记为“分布式交互式模拟”的过滤数据包的最后一层,但在 Scapy 中,最后一层是“原始”。我正在尝试以相同的人类可读格式从该层获取数据。到目前为止,我已经得到:

# Capture with Scapy
from scapy.all import sniff
capture = sniff(filter="dst 10.6.255.255 and port 3000", count=5)
packet = capture[0]
raw = pkt.lastlayer()
print(raw)

<Raw  load='\x068\x14\x05L\x88nK\x00x\x00\x00\x00\x94\x08\x88\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x9f\x00\x00\x02 \x00\x01sj\x9b\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04p\x00\x08\x00\x00\x00\x00\x00\x00d\xe9Y<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8c\x00\x00\x113\x00\x00\x00\x01\x00\x02\x0c\x00\x00\x00\x01\x02\x00\x00\x00\x041187\x00\x00\x00\x00\x00' |>
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何使这个人类可读吗?

scapy human-readable python-3.x

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

使用 scapy 从 pcap 文件中提取有效负载中的特定字节

我正在尝试从 pcap 文件中的每个数据包中提取特定字节。所有数据包都是ICMP。

在数据部分,有一个字节会改变每个数据包。每个人都处于相同的位置。我想提取那个字节。

在此处输入图片说明

使用 scapy:

pkts = rdpcap('test.pcap')
pl = PacketList([p for p in pkts])

bytes(pl[12].payload)
Run Code Online (Sandbox Code Playgroud)

返回以下内容:

b'E\x00\x00T]\xa7\x00\x00***J***\x01!A\xc0\xa88\x01\xc0\xa88o\x08\x004\xe9\xbf2\x00\x00^"\x87\xbe\x00\x0c2\xf4\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567'

我已将要提取的字节包含在三颗星内。但是,如果我打印出每个数据包的字节,我想提取的字节将处于不同的偏移量中。

如果我为每个数据包运行一个 hexdump,如下所示:

hexdump(bytes(pl[12].payload))
Run Code Online (Sandbox Code Playgroud)

我要提取的特定字节总是在相同的位置,但我不知道如何提取它。

如何使用 scapy 从 pcap 中提取特定字节?

按照这里的答案:从 pcap 文件中获取有效负载中的特定字节

如果我执行相同的命令,它不会做任何有用的事情:

>>> hexdump(pkts[14][2].load[8])
0000  00 00 00 00 00 00 00 00                          ........
>>>
Run Code Online (Sandbox Code Playgroud)

python scapy wireshark

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