标签: scapy

如何用scapy重新计算IP校验和?

可能重复:
如何计算数据包校验和而不发送它?

我已经在捕获的数据包中欺骗了源IP和MAC地址,但是现在我需要重新计算校验和,以便在收到它之后检查它(当然在注入网络之后).我自己并不想真正实现校验和,我认为scapy可以为我做这个.我读到该show2()函数应该重新计算校验和,但我似乎无法让它工作.

那么,我如何使用scapy重新计算(和替换)捕获+欺骗数据包的校验和?

谢谢!

python ip scapy spoofing

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

使用Scapy ping IP范围

我正在尝试编写一个Python脚本,该脚本使用Scapy模块ping内部IP范围以确定哪些IP在线.到目前为止我有这个:

#!/usr/bin/python
from scapy.all import *
conf.verb = 0
for ip in range(0, 256):
    packet = IP(dst="192.168.0." + str(ip), ttl=20)/ICMP()
    reply = sr1(packet)
    if "192.168." in reply.src:
         print reply.src, "is online"
Run Code Online (Sandbox Code Playgroud)

该程序将暂时无所事事,然后如果我用CTRL + CI杀死它会得到一条错误消息:

Traceback (most recent call last):
File "sweep.py", line 7, in <module>
if "192.168." in reply.src:
AttributeError: 'NoneType' object has no attribute 'src'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用单个IP地址而不是范围,它可以工作.像这样:

#!/usr/bin/python
from scapy.all import *
conf.verb = 0
packet = IP(dst="192.168.0.195", ttl=20)/ICMP()
reply = sr1(packet)
if "192.168." in reply.src:
    print reply.src, "is online" …
Run Code Online (Sandbox Code Playgroud)

python ping scapy

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

从tcpdump中剥离有效负载?

是否有自动方式(在tcpdump或通过帮助应用程序Out There)生成一个pcap文件,其中只包含以太网,IP和第4层(在我的情况下为TCP)标头,因此没有有效载荷/应用程序数据结果pcap?我发现由于标题大小经常变化,因此不可能选择不会捕获任何有效负载数据的捕获大小.

python networking tcp tcpdump scapy

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

Scapy和rdpcap功能

我正在使用rdpcapScapy的功能来读取PCAP文件.我还使用ScapyHTTP支持链接中描述的模块,这在我的情况下是必需的,因为我必须检索所有HTTP请求和响应及其相关数据包.

我注意到解析一个大的PCAP文件该rdpcap函数需要花费太多时间来读取它.

pcap更快的读取文件的解决方案吗?

python networking packet-capture scapy pcap

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

从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
查看次数

Python:通过字符串中的名称访问结构字段

在Scapy的,我想比较了多种任意两个包之间的头字段的ab.此字段列表是预定义的,例如:

fieldsToCompare = ['tos', 'id', 'len', 'proto'] #IP header
Run Code Online (Sandbox Code Playgroud)

通常我会单独做:

if a[IP].tos == b[IP].tos:
   ... do stuff...
Run Code Online (Sandbox Code Playgroud)

有没有办法从字符串列表中访问这些包字段,包括调用每个字符串的内容?喜欢:

for field in fieldsToCompare:
    if a[IP].field == b[IP].field:
         ... do stuff...
Run Code Online (Sandbox Code Playgroud)

python ip field structure scapy

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

如何验证Scapy中的数据包是否具有TCP层

我想知道如何验证从sr1()Scapy中的函数收到的数据包是否包含TCP层,以便对TCP标记进行一些处理.

scapy

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

在scapy中发送ICMP数据包并选择正确的接口

我们可以将srp()函数用于第3层ICMP数据包吗?我看到当我们制作ICMP echo-r​​equest数据包并使用sr()发送/接收时,我们看不到它被发送出接口,因此没有来自目的地的响应.但是如果我们使用srp()函数,我们会看到相同的数据包响应.什么时候应该使用sr()和srp()?在文档中,它声明sr()将用于L3数据包,而srp()将用于L2?但在我的情况下,我不确定为什么sr()不适用于ICMP数据包?有些专家可以帮我理解吗?

如果总是需要"iface"论证,也有人可以告诉我.没有它,scapy将如何知道它应该发送数据包的接口?

情况1:使用iface作为参数的sr()函数:

sr(icmp,iface="eth0")
Run Code Online (Sandbox Code Playgroud)

开始排放:

WARNING: Mac address to reach destination not found. Using broadcast.
Finished to send 1 packets.
^C
Received 0 packets, got 0 answers, remaining 1 packets
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:1 Other:0>)
Run Code Online (Sandbox Code Playgroud)

上面我没有看到来自IP 192.168.25.1的任何ICMP响应

案例2:没有iface的sr()函数:

sr(icmp)   
.Begin emission:
......WARNING: Mac address to reach destination not found. Using broadcast.
.Finished to send 1 packets.
...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^C
Received 887 packets, got 0 answers, remaining 1 packets
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 …
Run Code Online (Sandbox Code Playgroud)

python scapy

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

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 ×9

ip ×2

networking ×2

dpkt ×1

field ×1

linux ×1

packet-capture ×1

parsing ×1

pcap ×1

ping ×1

python-2.7 ×1

spoofing ×1

structure ×1

tcp ×1

tcpdump ×1

tshark ×1

wifi ×1