有没有办法使用scapy来获取数据包的到达时间?使用scapy读取pcap文件,我想知道所有数据包的到达时间,因为我们知道wireshark可以看到它.所以我想必须有办法.谁知道?
有没有人成功在PlanetLab节点上使用Scapy(运行Fedora 12)?
我知道安全的原始套接字限制,但似乎我可以通过设置发送数据包通过Scapy conf.L3socket=L3RawSocket.至于数据包的接收,我无法让Scapy工作,所以我只使用tcpdump.
TCP和ICMP似乎有效:
UDP没有:
是否需要设置任何其他参数才能接收这些ICMP数据包?
我有一台苹果电脑运行Leopard与python 2.6.我下载了最新版本的scapy并运行了" python setup.py install".一切按计划进行.现在,当我尝试通过输入"scapy"以交互模式运行它时,它会抛出一堆错误.是什么赋予了!
以防万一,这是完整的错误消息..
INFO: Can't import python gnuplot wrapper . Won't be able to plot.
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
ERROR: Unable to import pcap module: No module named pcap/No module named pcapy
ERROR: Unable to import dnet module: No module named dnet
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File …Run Code Online (Sandbox Code Playgroud) 我正在努力将scapy与扭曲整合,但我遇到了OSX上这个非常奇怪的错误,我似乎无法弄明白.
基本上我无法通过原始套接字发送有效的TCP数据包(包括IP头).这就是我在做的事情:
import socket
from scapy.all import IP, TCP
pkt = IP(src='0.0.0.0', dst='127.0.0.1')/TCP()
spkt1 = str(pkt)
outs = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
outs.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
outs.sendto(spkt1, ('127.0.0.1', 0))
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到以下错误:
outs.sendto(spkt1, ('127.0.0.1', 0))
socket.error: [Errno 22] Invalid argument
如果您没有scapy on不想使用它,这是数据包base64编码:
import base64
spkt1 = base64.b64decode("RQAAKAABAABABvvOAAAAAH8AAAEAFABQAAAAAAAAAABQAiAAEH4AAA==")
Run Code Online (Sandbox Code Playgroud)
非常奇怪的是,几乎相同的数据包似乎正确发送:
spkt2 = base64.b64decode("RQBAAAWwAAACBgAAAAAAAH8AAAEAyAOEAAAAAAAAAACwAgDIAHsAAAIEBbQBAwMBAQEICk3PUjMAAAAABAIAAA==")
Run Code Online (Sandbox Code Playgroud)
这是两个数据包的样子:
SPKT1
0000 45 00 00 28 00 01 00 00 40 06 FB CE 00 00 00 00 E..(....@.......
0010 7F 00 00 01 00 14 00 50 00 00 00 00 …Run Code Online (Sandbox Code Playgroud) 我正在编写一个小脚本,使用scapy收集一些信息,然后返回一些xml代码,我将传递给metasploit的xmlrpc接口.我希望我的脚本只返回xml,没有其他警告等.
我可以通过在verbose=0sr1命令中添加选项来抑制大多数scapy输出.我在每个输出之前仍然得到的,并且我假设它在我加载模块时返回此警告,是:
警告:找不到IPv6目标的路由::(没有默认路由?)
通过调用我的脚本,我可以轻松地重定向该输出:
./myscript 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
但我想将其纳入脚本中.为此,我找到了一个提示,一个可以有一个NullDevice类,它不会写任何东西,然后设置sys.stderr为该NullDevice类的实例化.
这只在我已经加载模块后不幸地工作,所以我仍然有警告,它只重定向发送到stderr的任何后续消息.
如何禁止显示在屏幕上的警告消息?
我试图通过使用Scapy捕获功能捕获传出的数据包(即,来自我的localhost)sniff,然后在捕获它们时解析它们但我不断收到以下警告:
WARNING: fileno: pcapy API does not permit to get capure file descriptor. Bugs ahead! Press
Enter to trigger packet reading
Run Code Online (Sandbox Code Playgroud)
这个问题有解决方法吗?我需要在没有用户交互的情况下完全自动化该过程.
任何帮助是极大的赞赏.
ps我的系统设置是:
OS: Mac OS X 10.7.5
python: 2.7.1
scapy: 2.2.0
Run Code Online (Sandbox Code Playgroud)
谢谢
下面给出的代码用于从提供的IP地址嗅探数据包.
from scapy.all import *
sniff(filter="tcp and host 192.168.0.90", count=10)
Run Code Online (Sandbox Code Playgroud)
在运行此代码时,我得到的错误是:
Traceback (most recent call last): File ".\sample.py", line 1, in <module>
from scapy.all import * File "C:\Python27\lib\site-packages\scapy\all.py", line 16, in <module>
from arch import * File "C:\Python27\lib\site-packages\scapy\arch\__init__.py", line 79, in <module>
from windows import * File "C:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 23, in <module>
from scapy.arch import pcapdnet File "C:\Python27\lib\site-packages\scapy\arch\pcapdnet.py", line 30, in <module>
import pcapy as pcap ImportError: No module named pcapy
Run Code Online (Sandbox Code Playgroud)
我哪里错了?我正在使用Windows 7.
因此,我试图了解Python中的scapy库并尝试运行使用scapy的脚本.该脚本使用以下命令导入模块:
from scapy.all import *
我看到了这个,当然安装scapy:
pip install scapy
接下来,我收到以下导入错误:
ImportError: No module named pcapy
那么,我决定安装pcapy pip install pcapy.它安装正常,但现在我得到导入错误:
ImportError: No module named dumbnet
我找不到一个名为dumbnet的模块.有谁知道这里发生了什么?
这是我第一次搞乱scapy并且在激活的虚拟环境中使用安装了Python 2.7的Mac.
EDIT1:
这是完整的错误:
Traceback (most recent call last):
File "syn_test.py", line 4, in <module>
from scapy.all import * # The One and Only Scapy
File "/Users/dasComputer/venv_mac/lib/python2.7/site-packages/scapy/all.py", line 16, in <module>
from scapy.arch import *
File "/Users/dasComputer/venv_mac/lib/python2.7/site-packages/scapy/arch/__init__.py", line 79, in <module>
from scapy.arch.pcapdnet import *
File "/Users/dasComputer/venv_mac/lib/python2.7/site-packages/scapy/arch/pcapdnet.py", line 471, in <module>
import dumbnet as …Run Code Online (Sandbox Code Playgroud) 如何检查scapy数据包中是否存在特定图层?例如,我需要检查IP头的src/dst字段,我怎么知道特定的数据包实际上有一个IP头(例如与IPv6相反).
我的问题是,当我去检查IP头字段时,我得到一个错误,说IP层不存在.这个特定的数据包不是IP头,而是IPv6.
pkt = Ether(packet_string)
if pkt[IP].dst == something:
# do this
Run Code Online (Sandbox Code Playgroud)
我尝试引用IP层时发生错误.在尝试操作之前,如何检查图层是否存在?
谢谢!
我正在尝试编写一个scapy脚本,它可以在ping时间上取平均值,因此我需要在发送的ICMP echo/reply数据包和收到的回复数据包之间得到时间.现在,我有这个:
#! /usr/bin/env python
from scapy.all import *
from time import *
def QoS_ping(host, count=3):
packet = Ether()/IP(dst=host)/ICMP()
t=0.0
for x in range(count):
t1=time()
ans=srp(packet,iface="eth0", verbose=0)
t2=time()
t+=t2-t1
return (t/count)*1000
Run Code Online (Sandbox Code Playgroud)
问题是使用time()函数不会产生好的结果.例如,我在一个域上发现134毫秒,并且在同一个域上使用ping系统功能,我发现30毫秒(当然是平均值).
我的问题是:有没有办法通过scapy获得发送的数据包和收到的数据包之间的确切时间?我不想使用popen()函数或其他系统调用,因为我需要scapy来进行未来数据包管理.
scapy ×10
python ×9
networking ×2
fedora ×1
hide ×1
installation ×1
ip ×1
macos ×1
output ×1
ping ×1
python-2.7 ×1
raw-sockets ×1
sockets ×1
stderr ×1
tcp ×1
time ×1