boofuzz中文翻译第四章

2024-08-21 06:12

本文主要是介绍boofuzz中文翻译第四章,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4.1 会话
class boofuzz.Session(session_filename=None, index_start=1, index_end=None, sleep_time=0.0,
restart_interval=0, web_port=26000, keep_web_open=True, console_gui=False,
crash_threshold_request=12, crash_threshold_element=3, restart_sleep_time=5,
restart_callbacks=None, restart_threshold=None, restart_timeout=None,
pre_send_callbacks=None, post_test_case_callbacks=None,
post_start_target_callbacks=None, fuzz_loggers=None,
fuzz_db_keep_only_n_pass_cases=0, receive_data_after_each_request=True,
check_data_received_each_request=False, receive_data_after_fuzz=False,
ignore_connection_reset=False, ignore_connection_aborted=False,
ignore_connection_issues_when_sending_fuzz_data=True,
ignore_connection_ssl_errors=False, reuse_target_connection=False, target=None,
web_address='localhost', db_filename=None)

继承自 Graph
扩展 pgraph.graph 并提供了一个用于构建协议对话的容器。
参数

• session_filename (str) – 用于序列化持久数据的文件名。默认为 None。
• index_start (int) –
• index_end (int) –
• sleep_time (float) – 在测试之间暂停的时间(秒)。默认为 0。
• restart_interval (int) – 在 n 个测试用例后重启目标,设置为 0 禁用(默认)。
• console_gui (bool) – 使用 curses 生成一个类似于 web 界面的静态控制台屏幕。在 Windows 下未经过测试。默认为 False。
• crash_threshold_request (int) – 在请求耗尽前允许的最大崩溃次数。默认为 12。
• crash_threshold_element (int) – 在元素耗尽前允许的最大崩溃次数。默认为 3。
• restart_sleep_time (int) – 当无法重启目标时暂停的时间(秒)。默认为 5。
• restart_callbacks (method 列表) – 注册的方法将在 post_test_case_callback 失败后被调用。默认为 None。
• restart_threshold (int) – 在丢失目标连接时的最大重试次数。默认为 None(无限次)。
• restart_timeout (float) – 连接尝试应重试的时间(秒)。默认为 None(无限次)。
• pre_send_callbacks (method 列表) – 注册的方法将在每次 fuzz 请求之前被调用。默认为 None。
• post_test_case_callbacks (method 列表) – 注册的方法将在每次 fuzz 测试用例之后被调用。默认为 None。
• post_start_target_callbacks (method 列表) – 在目标启动或重启后调用的方法,例如由进程监控器启动。
• web_port (intNone) – 用于通过 web 浏览器监控 fuzzing 活动的端口。设置为 None 以禁用 web 应用。默认为 26000。
• keep_web_open (bool) – 在会话完成后保持 web 界面打开。默认为 True。
• fuzz_loggers (ifuzz_logger.IFuzzLogger 列表) – 用于保存测试数据和结果。默认为 Log 到 STDOUT。
• fuzz_db_keep_only_n_pass_cases (int) – 通过仅保存在失败或错误之前的 n 个测试用例中的通过测试用例来最小化磁盘使用。设置为 0 以在每次测试用例后保存(高磁盘 I/O!)。默认为 0。
• receive_data_after_each_request (bool) – 如果为 True,Session 将尝试在传输每个非 fuzz 节点后接收回复。默认为 True。
• check_data_received_each_request (bool) – 如果为 True,Session 将验证在传输每个非 fuzz 节点后是否已接收一些数据,如果没有,则注册一个失败。如果为 False,则不执行此检查。默认为 False。除非 receive_data_after_each_request 为 False,否则仍会进行接收尝试。
• receive_data_after_fuzz (bool) – 如果为 True,Session 将尝试在传输 fuzzed 消息后接收回复。默认为 False。
• ignore_connection_reset (bool) – 将 ECONNRESET 错误(“目标连接重置”)记录为“info”而不是失败。
• ignore_connection_aborted (bool) – 将 ECONNABORTED 错误记录为“info”而不是失败。
• ignore_connection_issues_when_sending_fuzz_data (bool) – 忽略 fuzz 数据传输失败。默认为 True。通常启用此设置是有帮助的,因为目标可能会在消息明显无效时断开连接。
• ignore_connection_ssl_errors (bool) – 将 SSL 相关错误记录为“info”而不是失败。默认为 False。
• reuse_target_connection (bool) – 如果为 True,只使用一个目标连接而不是每个测试用例重新连接。默认为 False。• 目标(Target)- 模糊测试会话的目标。目标必须完全初始化。默认为None。
• db_filename(str- 用于存储测试结果和案例信息的sqlite数据库文件名。默认为./boofuzz-results/{uniq_timestamp}.db
• web_address - Boofuzz日志器暴露的地址。默认为'localhost'

add_node(node)
向图中添加一个pgraph节点。我们重载这个例程,以便在添加节点时自动生成并分配一个ID。
参数: node(pgraph.Node)- 要添加到会话图中的节点
add_target(target)

向会话中添加一个目标。可以添加多个目标以进行并行模糊测试。
参数: target(Target)- 要添加到会话的目标
build_webapp_thread(port=26000, address=‘localhost’)
connect(src, dst=None, callback=None)
在两个请求(节点)之间创建连接,并注册一个可选的回调函数,以在源和目的请求之间传输过程中进行处理。会话类维护一个顶级节点,所有初始请求都必须连接到该节点。示例:

sess = sessions.session()
sess.connect(sess.root, s_get("HTTP"))

如果只提供一个参数,sess.connect()将默认将提供的节点附加到根节点。这是一个方便的别名。以下行与上面示例中的第二行相同:
sess.connect(s_get(“HTTP”))
利用回调方法来处理如挑战响应系统等情境。回调方法必须遵循Session.example_test_case_callback()的消息签名。记得包括kwargs以向前兼容。

  • 参数:

    • src(str或Request(pgrah.Node))- 源请求名称或请求节点
    • dst(str或Request(pgrah.Node),可选)- 目的请求名称或请求节点
    • callback(def,可选)- 在节点传输之间传递接收到的数据的回调函数。默认为None

    返回值
    源和目的之间的边。
    返回类型
    pgraph.Edge

*example_test_case_callback(target, fuzz_data_logger, session, test_case_context, args, kwargs)
提供给connect()或register_post_test_case_callback()方法的示例调用签名
参数: target(Target)- 具有类似套接字接口的目标。

• fuzz_data_logger(ifuzz_logger.IFuzzLogger)- 允许记录测试检查和通过/失败。提供时已打开测试用例和测试步骤。
• session(Session)- 调用post_send的会话对象。有用属性包括last_send和last_recv。
• test_case_context(ProtocolSession)- 测试用例范围数据的上下文。
ProtocolSession session_variables值通常在回调中设置,并通过ProtocolSessionReference类型的默认值在元素中引用。
• args - 实现应包括*args和**kwargs以向前兼容。
• kwargs - 实现应包括*args和kwargs以向前兼容。

属性 exec_speed
export_file()
将各种对象值转储到磁盘。
参见
import_file()
feature_check()
检查所有消息/功能。
返回值:无
fuzz(name=None, max_depth=None)
模糊整个协议树。
遍历并模糊所有模糊案例,根据self.skip跳过,并根据self.restart_interval重新启动。
如果你想让web服务器可用,你的程序在调用这个方法后必须持续运行。helpers.pause_for_signal()可用于此目的。
参数

• name(str)- 传递一个请求名称以仅模糊单个请求消息。传递一个测试用例名称以仅模糊单个测试用例。
• max_depth(int)- 最大组合深度;设置为1以进行“简单”模糊测试。

返回值:无
fuzz_by_name(name)
通过名称模糊特定测试用例或节点。
参数

- name(str)- 节点名称。
- fuzz_single_case(mutant_index)

已弃用:通过mutant_index模糊测试用例。
弃用说明:新的方法是将Session的开始和结束索引设置为相同的值。
参数

- mutant_index(int)- 正的非零整数。

返回值:无
import_file()
从磁盘加载各种对象值。
参见
export_file()
属性 netmon_results
num_mutations(max_depth=None)
图中总变异数。此例程的逻辑与 fuzz() 相同。请参阅 fuzz() 中的内联注释。此例程会适当更新成员变量 self.total_num_mutations。
参数

• max_depth (int) – 用于模糊测试的最大组合深度。如果此值为
• 1 (None 或大于) –
• fuzzing (因为当使用组合时,变异的数量通常非常大) –

返回:本会话中的总变异数。
返回类型:int
register_post_test_case_callback(method)
注册一个事后测试用例方法。
注册的方法将在每个模糊测试用例之后调用。
潜在用途:
• 关闭连接。
• 检查预期的响应。
回调事件的顺序如下:
pre_send() - req - callback … req - callback - post-test-case-callback
参数
method (function)

– 与 post_send() 具有相同参数的方法
属性 runtime
server_init()
由 fuzz() 调用以初始化变量、Web界面等。
test_case_data(index)
返回测试用例数据对象(供Web服务器使用)
参数
**index (int) **– 测试用例索引
返回
测试用例数据对象
返回类型:DataTestCase
transmit_fuzz(sock, node, edge, callback_data, mutation_context)
渲染并传输一个模糊节点,相应地处理回调。
参数

• sock (Target, optional) – 用于传输节点的类似套接字的对象
• node (pgraph.node.node (Node), optional) – 要传输的请求/节点
• edge (pgraph.edge.edge (pgraph.edge), optional) – 当前模糊路径从“节点”到下一个节点的边缘。
• callback_data (bytes) – 之前回调的数据。
• mutation_context (MutationContext) – 当前变异上下文。

transmit_normal(sock, node, edge, callback_data, mutation_context)
渲染并传输一个非模糊节点,相应地处理回调。
参数

• sock (Target, optional) – 用于传输节点的类似套接字的对象
• node (pgraph.node.node (Node), optional) – 要传输的请求/节点
• edge (pgraph.edge.edge (pgraph.edge), optional) – 当前模糊路径从“节点”到下一个节点的边缘。
• callback_data (bytes) – 之前回调的数据。
• mutation_context (MutationContext) – 活跃的变异上下文。
4.1.1 请求图可视化选项

以下方法可用于渲染数据,然后可用于可视化请求结构。
Session.render_graph_gml()
渲染GML图形描述。
返回:GML图形描述。
返回类型:str
Session.render_graph_graphviz()
渲染graphviz图形结构。
示例创建png:

with open('somefile.png', 'wb') as file:
file.write(session.render_graph_graphviz().create_png())

返回:代表整个图形的Pydot对象
返回类型:pydot.Dot

Session.render_graph_udraw()
渲染uDraw图形描述。
返回:uDraw图形描述。
返回类型:str
Session.render_graph_udraw_update()
渲染uDraw图形更新描述。
返回:uDraw图形描述。
返回类型:str

4.2 目标
class boofuzz.Target(connection, monitors=None, monitor_alive=None, max_recv_bytes=10000,
repeater=None, procmon=None, procmon_options=None, **kwargs)

基础:object
目标描述符容器。
接受一个ITargetConnection,并用适当的FuzzDataLogger调用包装send/recv。
封装pedrpc连接逻辑。
包含一个由Session.add_target()配置的日志记录器。
示例

tcp_target = Target(SocketConnection(host='127.0.0.1', port=17971))

参数

• connection (itarget_connection.ITargetConnection) – 测试系统的连接。
• monitors (List[Union[IMonitor, pedrpc.Client]]) – 此目标的监视器列表。
• monitor_alive – 当监视器活着时调用的函数列表。它被传递了变得活跃的监视器实例。使用它来例如在重启时设置选项。
• repeater (repeater.Repeater) – 用于发送的重复器。默认为None。
• procmon – 添加进程监视器的已弃用接口。
• procmon_options – 添加进程监视器的已弃用接口。

close()
关闭与目标的连接。
返回:None
monitors_alive()
等待监视器变得活跃/建立与RPC服务器的连接。此方法在每次重启目标以及将其添加到会话时调用。成功探测后,将调用回调,传递监视器。
返回:None
属性 netmon_options
open()
打开与目标的连接。确保调用close!
返回:None
pedrpc_connect()
属性 procmon_options
recv(max_bytes=None)
从目标接收最多max_bytes的数据。
参数

max_bytes (int) – 最大接收字节数。

返回:接收到的数据。
send(data)
向目标发送数据。仅在调用open!之后有效。
参数

data – 要发送的数据。

返回:None
set_fuzz_data_logger(fuzz_data_logger)
设置此对象的模糊数据日志记录器 - 用于发送和接收的模糊数据。
参数

fuzz_data_logger (ifuzz_logger.IFuzzLogger) – 新的日志记录器。

返回:None

4.2.1 Repeater
class boofuzz.repeater.Repeater(sleep_time)

基础:object
基础重复器类。
参数

sleep_time (float) – 重复之间的睡眠时间。

abstract log_message()
格式化消息以输出到日志文件。它应该包含有关您重复的信息。

abstract repeat()
决定操作是否应重复。
返回:如果操作应重复则返回True,否则返回False。
返回类型:Bool
abstract reset()
重置重复器的内部状态。
abstract start()
启动重复器。
以下是对该接口的具体实现:

4.2.2 TimeRepeater
class boofuzz.repeater.TimeRepeater(duration, sleep_time=0)

基础:Repeater
基于时间的重复器类。启动计时器,直到持续时间秒数过去。
引发:ValueError – 如果指定的时间<= 0,则引发。
参数

• duration (float) – 重复的持续时间。
• sleep_time (float) – 重复之间的睡眠时间。

log_message()
格式化消息以输出到日志文件。它应该包含有关您重复的信息。
repeat()
决定操作是否应重复。
返回:如果操作应重复则返回True,否则返回False。
返回类型:Bool
reset()
重置计时器。
start()
启动计时器。

4.2.3 CountRepeater
class  boofuzz.repeater.CountRepeater(count, sleep_time=0)

基类:Repeater
基于计数的重放器类。重复固定次数。
引发
ValueError – 如果指定的计数<1,则引发。
参数

• count (int) – 要发送的数据包总数。重要提示:不要将此参数与重复次数混淆。指定1将发送确切的一个数据包。
• sleep_time (float) – 重复之间的休眠时间。

log_message()
格式化一条消息以输出到日志文件。它应该包含有关您重复的信息。
repeat()
决定操作是否应该重复。
返回:如果操作应该重复,则返回True,否则返回False。
返回类型:布尔值
reset()
重置重放器的内部状态。
start()
启动重放器。

4.3 连接

连接对象实现 ITargetConnection。可用选项包括:

• TCPSocketConnection
• UDPSocketConnection
• SSLSocketConnection
• RawL2SocketConnection
• RawL3SocketConnection
• SocketConnection (已弃用)
• SerialConnection
4.3.1 ITargetConnection
class boofuzz.connections.ITargetConnection

基类:object
用于对模糊目标进行连接的接口。目标连接可以多次打开和关闭。在使用send/recv之前必须打开,在之后必须关闭。
在版本0.2.0中更改:ITargetConnection已移至connections子包中。现在完整的路径是boofuzz.connections.itarget_connection.ITargetConnection
abstract close()
关闭连接。
返回

abstract property info
返回连接信息的描述。
例如,“127.0.0.1:2121”
返回:连接信息描述
返回类型:str
abstract method open()
打开到目标的连接。确保调用close!
返回:无
abstract method recv(max_bytes)
接收最多max_bytes的数据。
参数

max_bytes (int) – 最大接收字节数。

返回:接收到的数据。如果没有接收到数据,则返回bytes(‘’)。
返回类型:bytes
abstract method send(data)
向目标发送数据。
参数

data – 要发送的数据。

返回:实际发送的字节数。
返回类型:int

4.3.2 BaseSocketConnection
class boofuzz.connections.BaseSocketConnection(send_timeout, recv_timeout)

继承自 ITargetConnection
此类作为多个基于套接字的连接的基础。
在版本0.2.0中新增。
参数

• send_timeout (float) – 发送前等待超时的秒数。默认为5.0。
• recv_timeout (float) – 接收前等待超时的秒数。默认为5.0。

close()
关闭与目标的连接。
返回值:None
abstract method open()
打开与目标的连接。确保调用close!
返回值:None

4.3.3 TCPSocketConnection
class boofuzz.connections.TCPSocketConnection(host, port, send_timeout=5.0, recv_timeout=5.0,
server=False)

继承自 BaseSocketConnection
用于TCP套接字的BaseSocketConnection实现。
在版本0.2.0中新增。
参数

• host (str) – 目标系统的主机名或IP地址。
• port (int) – 目标服务的端口。
• send_timeout (float) – 发送前等待超时的秒数。默认为5.0。
• recv_timeout (float) – 接收前等待超时的秒数。默认为5.0。
• server (bool) – 设置为True以启用服务器端模糊测试。

close()
关闭与目标的连接。
返回值:None

property info
返回连接信息的描述。
例如,“127.0.0.1:2121”
返回值:连接信息描述
返回类型:str
open()
打开与目标的连接。确保调用close!
返回值:None
recv(max_bytes)
从目标接收最多max_bytes的数据。
参数

max_bytes (int) – 最大接收字节数。

返回值
接收到的数据。
send(data)
向目标发送数据。仅在调用open()后有效!
参数

data – 要发送的数据。

返回值:实际发送的字节数。
返回类型:int

4.3.4 UDPSocketConnection
class boofuzz.connections.UDPSocketConnection(host, port, send_timeout=5.0, recv_timeout=5.0,server=False, bind=None, broadcast=False)

extends BaseSocketConnection
用于UDP套接字的BaseSocketConnection实现。
在版本0.2.0中新增。
参数0。

• recv_timeout (float) – 接收前等待超时的秒数。默认为5.0。
• server (bool) – 设置为True以启用服务器端模糊测试。
• bind (tuple (host, port)) – 套接字绑定地址和端口。如果使用recv()则必须提供。
• broadcast (bool) – 设置为True以启用UDP广播。必须提供适当的广播地址才能使send()工作,并且对于recv()工作,绑定主机必为''

Property info
返回连接信息的描述。
例如,“127.0.0.1:2121”
返回值:连接信息描述
返回类型:str
classmethod max_payload()
返回此连接一次可以发送的最大负载。
此方法通过一些复杂的CTypes魔法执行getsockopt(),以平台无关的方式确定最大UDP负载大小。
返回值:当前平台支持的UDP数据包的最大长度
返回类型:int
open()
打开与目标的连接。确保调用close!
返回值:None
recv(max_bytes)
从目标接收最多max_bytes的数据。
参数

max_bytes (int) – 最大接收字节数。

返回值:接收到的数据。
send(data)
向目标发送数据。仅在调用open!后有效!某些协议会截断;参见self.MAX_PAYLOADS。
参数

data – 要发送的数据。

返回值:实际发送的字节数。
返回类型:int

4.3.5 SSLSocketConnection
class boofuzz.connections.SSLSocketConnection(host, port, send_timeout=5.0, recv_timeout=5.0,
server=False, sslcontext=None,
server_hostname=None)

Bases TCPSocketConnection
用于SSL套接字的BaseSocketConnection实现。
在版本0.2.0中新增。
参数

• host (str) – 目标系统的主机名或IP地址。
• port (int) – 目标服务的端口。
• send_timeout (float) – 发送前等待的秒数,超时则失败。默认为5.0秒。
• recv_timeout (float) – 接收前等待的秒数,超时则失败。默认为5.0秒。
• server (bool) – 设置为True以启用服务器端模糊测试。
• sslcontext (ssl.SSLContext) – 要使用的Python SSL上下文。如果server=True或server_hostname=None,则为必需。
• server_hostname (string) – 服务器主机名,用于验证远程SSL/TLS服务器的身份

open()
打开与目标的连接。确保调用close!
返回:None
recv(max_bytes)
从目标接收最多max_bytes的数据。
参数:

max_bytes (int) – 最大接收字节数。

返回:接收到的数据。
send(data)
向目标发送数据。仅在调用open!后有效。
参数:

data – 要发送的数据。

返回:实际发送的字节数。
返回类型:int

4.3.6 RawL2SocketConnection
class boofuzz.connections.RawL2SocketConnection(interface, send_timeout=5.0, recv_timeout=5.0,
ethernet_proto=0, mtu=1518, has_framecheck=True)

Bases BaseSocketConnection
用于Raw Layer 2套接字的BaseSocketConnection实现。
在版本0.2.0中新增。
参数

• interface (str) – 目标系统的主机名或IP地址。
• send_timeout (float) – 发送前等待的秒数。默认为5.0秒。
• recv_timeout (float) – 接收前等待的秒数。默认为5.0秒。
• ethernet_proto (int) – 要绑定的以太网协议。如果提供,打开的套接字将绑定到此协议,否则使用Python的默认值0。如果此套接字用于接收,则必须提供。有效选项请参见Linux内核文档中的<net/if_ether.h>。通常,ETH_P_ALL (0x0003)不是一个好主意。
• mtu (int) – 设置此连接的最大传输单元大小。对于标准以太网,默认为1518。
• has_framecheck (bool) – 指示目标以太网协议是否需要4字节用于帧检查。默认为True(对于标准以太网)。

属性 info
返回连接信息的描述。
例如,“127.0.0.1:2121”
返回:连接信息描述
返回类型:str
open()
打开与目标的连接。确保调用close!
返回:None
recv(max_bytes)
从原始套接字接收数据包。如果max_bytes < mtu,则只返回前max_bytes的数据,并丢弃数据包的其余部分。否则,返回整个数据包。
参数

max_bytes (int) – 最大返回字节数。0表示返回整个数据包。

返回:接收到的数据
send(data)
向目标发送数据。仅在调用open!后有效!数据将被截断为self.max_send_size(默认:1514字节)。
参数

data – 要发送的数据。

返回:实际发送的字节数。
返回类型:int

4.3.7 RawL3SocketConnection
class boofuzz.connections.RawL3SocketConnection(interface, send_timeout=5.0, recv_timeout=5.0,
ethernet_proto=2048, l2_dst=b'\xff\xff\xff\xff\xff\xff',packet_size=1500)

Bases BaseSocketConnection
用于Raw Layer 2套接字的BaseSocketConnection实现。
在版本0.2.0中新增。
参数

• interface (str) – 发送和接收的接口。
• send_timeout (float) – 发送前等待的秒数。默认为5.0秒。
• recv_timeout (float) – 接收前等待的秒数。默认为5.0秒。
• ethernet_proto (int) – 要绑定的以太网协议。默认为ETH_P_IP (0x0800)。
• l2_dst (bytes) – 第二层目的地址(例如MAC地址)。默认为b’ÿÿÿÿÿÿ’(广播)
• packet_size (int) – 最大数据包大小(以字节为单位)。如果底层接口使用标准以太网作为第二层,则默认为1500。否则,可能适用不同的数据包大小(例如Jumboframes, 802.5 Token Ring, 802.11 wifi等),必须指定。

属性 info
返回连接信息的描述。
例如,“127.0.0.1:2121”
返回:连接信息描述
返回类型:str
open()
打开与目标的连接。确保调用close!
返回:None
recv(max_bytes)
从原始套接字接收数据包。如果max_bytes < packet_size,则只返回前max_bytes的数据,并丢弃数据包的其余部分。否则,返回整个数据包。
参数

max_bytes (int) – 最大返回字节数。0表示返回整个数据包。

返回:接收到的数据
send(data)
向目标发送数据。仅在调用open!后有效!数据将被截断为self.packet_size(默认:1500字节)。
参数

data – 要发送的数据。

返回:实际发送的字节数。
返回类型:int

4.3.8 SocketConnection
boofuzz.connections.SocketConnection(host, port=None, proto='tcp', bind=None, send_timeout=5.0,
recv_timeout=5.0, ethernet_proto=None,
l2_dst=b'\xff\xff\xff\xff\xff\xff', udp_broadcast=False, server=False,
sslcontext=None, server_hostname=None)

使用套接字的ITargetConnection实现。
支持UDP、TCP、SSL、原始链路2层和原始链路3层数据包。
注意:SocketConnection已弃用,并将在Boofuzz的未来版本中被移除。请使用从BaseSocketConnection派生的类。
版本0.2.0变更:SocketConnection已移至connections子包中。现在完整的路径是boofuzz.connections.socket_connection.SocketConnection
自版本0.2.0起弃用:请使用从BaseSocketConnection派生的类。
示例:

tcp_connection = SocketConnection(host='127.0.0.1', port=17971)
udp_connection = SocketConnection(host='127.0.0.1', port=17971, proto='udp')
udp_connection_2_way = SocketConnection(host='127.0.0.1', port=17971, proto='udp', bind=('127.0.0.1', 17972))
udp_broadcast = SocketConnection(host='127.0.0.1', port=17971, proto='udp', bind=('127.0.0.1', 17972),
udp_broadcast=True)
raw_layer_2 = (host='lo', proto='raw-l2')
raw_layer_2 = (host='lo', proto='raw-l2',
l2_dst='\xFF\xFF\xFF\xFF\xFF\xFF', ethernet_proto=socket_connection.
ETH_P_IP)
raw_layer_3 = (host='lo', proto='raw-l3')

参数

• host (str) – 目标系统的主机名或IP地址,或者使用raw-l2或raw-l3时的网络接口字符串。
• port (int) – 目标服务的端口。对于proto值'tcp''udp''ssl'是必需的。
• proto (str) – 通信协议("tcp""udp""ssl""raw-l2""raw-l3")。默认为"tcp"。raw-l2:在第2层发送数据包。必须包含链路层头部(例如以太网帧)。raw-l3:在第3层发送数据包。必须包含网络协议头部(例如IPv4)。
• bind (tuple (host, port)) – 套接字绑定地址和端口。使用'udp'协议时使用recv()是必需的。
• send_timeout (float) – 发送前等待超时的秒数。默认为5.0。
• recv_timeout (float) – 接收前等待超时的秒数。默认为5.0。
• ethernet_proto (int) – 使用'raw-l3'时的以太网协议。16位整数。使用'raw-l3'时默认ETH_P_IP (0x0800)。更多选项请参见Linux文档中的“if_ether.h”。
• l2_dst (str) – 第2层目标地址(例如MAC地址)。仅由'raw-l3'使用。默认为'ÿÿÿÿÿÿ'(广播)。
• udp_broadcast (bool) – 设置为True以启用UDP广播。必须提供适当的广播地址以便send()工作,并且对于recv()工作,绑定主机为空。
• server (bool) – 设置为True以启用服务器端模糊测试。
• sslcontext (ssl.SSLContext) – 要使用的Python SSL上下文。如果server=True或server_hostname=None,则是必需的。
• server_hostname (string) – server_hostname,用于验证远程SSL/TLS服务器的身份时是必需的。
4.3.9 SerialConnection
class boofuzz.connections.SerialConnection(port=0, baudrate=9600, timeout=5,
message_separator_time=0.3, content_checker=None)

Bases:ITargetConnection
用于通用串行端口的ITargetConnection实现。
由于串行端口没有提供分离消息/数据包的默认功能,这个类提供了几种手段:

• timeout:在超时秒后返回接收到的字节。
• msg_separator_time:在电线上静默给定时间后返回接收到的字节。这对于没有机器可读分隔符的终端协议很有用。响应可能需要很长时间才能发送其信息,当数据停止到来时,你就知道消息已经完成。
• content_check:用户定义的函数接收到目前为止接收到的数据,并检查数据包。如果数据包尚未完成,函数应返回0,或者如果已收到有效消息的n字节,则返回n。剩余的字节将为下一次recv()调用存储。示例:
def content_check_newline(data):
if data.find('\n') >= 0:
return data.find('\n')
else:
return 0
如果这些方法都不使用,你的连接可能会永远挂起。

版本0.2.0变更:SerialConnection已移至connections子包中。现在完整的路径是boofuzz.connections.serial_connection.SerialConnection
参数

• port (Union[int, str]) – 串行端口名称或编号。
• baudrate (int) – 端口的波特率。
• timeout (float) – 对于recv()。从接收开始后超时秒,recv()将返回所有接收到的数据(如果有的话)。
• message_separator_time (float) – 在message_separator_time秒内没有接收到更多数据后,recv()将返回。可选。默认为None。
• content_checker (function(str) -> int) – 用户定义的函数。recv()将迄今为止接收到的所有字节传递给这个方法。如果方法返回n > 0,recv()将返回n字节。如果它返回0,recv()将继续读取。

close()
关闭与目标的连接。
返回:None
property info
返回连接信息的描述。
例如,“127.0.0.1:2121”
返回:连接信息描述
返回类型:str
open()
打开与目标的连接。确保调用close()!
返回:None
recv(max_bytes)
从目标接收最多max_bytes的数据。
参数

max_bytes (int) – 最大接收字节数。

返回:接收到的数据。
send(data)
向目标发送数据。仅在调用open()后有效!
参数

data – 要发送的数据。

返回:实际发送的字节数。
返回类型:int

这篇关于boofuzz中文翻译第四章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092349

相关文章

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

第四章 类和对象(2)

4.2 类         类是封装对象的属性和行为的载体,Java中定义类使用class关键字,其语法如下: class 类名称{// 成员变量// 成员方法()}         在Java语言中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。本节将对类与对象进行详细讲解。          4.2.1 成员变量         在Java中对象的属性也称为成员变量,

第四章 类和对象(1)

4.1面向对象概述         在程序开发初期,人们使用结构化开发语言,但随着软件的规模越来越庞大,结构化语言的弊端也逐渐暴露出来,开发周期被无休止地拖延,产品的质量也不尽如人意,结构化语言已经不再适合当前的软件开发。这时,人们开始将另一种开发思想引入程序中,即面向对象的开发思想。面向对象思想是人类最自然的一种思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及行

深入理解计算机系统阅读笔记-第四章

第四章 处理器体系结构 一个处理器支持的指令和指令的字节级编码称为它的ISA(instruction-set architecture,指令集体系结构)。不同家族处理器有不同的ISA。ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,编译器编写者只需要知道允许哪些指令,以及他们是如何编码的;而处理器设计者,必须建造出执行这些指令的处理器。 ISA模型看上去是顺序执行的,实际上同时处

React第四章(babel)

Babel 什么是Babel? Babel 是一个 JavaScript 编译器,提供了JavaScript的编译过程,能够将源代码转换为目标代码。 AST -> Transform -> Generate 官网 https://babeljs.io/ 查看AST https://astexplorer.net/ Babel所有的包 https://babeljs.io/docs/

嵌入式开发高频面试题——第四章 常见算法(下)

目录 4.2.1 Vector和List的异同4.2.2 Vector的内存增长与底层实现4.2.3 Vector和Deque的比较4.2.4 STL里有sort函数,为什么list还要定义sort?4.2.5 STL底层数据结构实现4.2.6 利用迭代器删除元素会发生什么?4.2.7 Map的实现与查找效率4.2.8 几种模板插入的时间复杂度 4.2.1 Vector和Lis

第四章 结构化分析简记

第四章  结构化分析 结构化方法:结构化分析+结构化设计+结构化程序设计 结构化分析的基本思想:自顶向下,逐步求精;基本原则:抽象与分解。

第四章 感受Mac之美-效率提高从操作快捷键开始

了解和掌握快捷键,可以提高工作效率,作用和意义是不言而喻的。节省不必要的操作时间,让你专注做自己真正重要的事。 比如最简单的复制,粘贴之类的入门快捷键,如果每个操作都需要右键执行去操作的话,那么在电脑上做什么操作都会慢一拍。 我是在入手俩周后,自己摸索之后,基本对系统里面基本的快捷键都有个印象了。 看了这么多的快捷键,一时半会也记不住啊,是不是有点崩溃啊,不过大家也不用担心快捷键的记不住,今

嵌入式开发高频面试题——第四章 常见算法(上)

目录 4.1 排序算法4.1.1 **各种排序算法的时间空间复杂度、稳定性** ⭐⭐⭐⭐⭐4.1.2 **各种排序算法什么时候有最好情况、最坏情况(尤其是快排)** ⭐⭐⭐⭐ 4.1.3 **冒泡排序** ⭐⭐⭐⭐4.1.4 **选择排序** ⭐⭐⭐⭐4.1.5 **插入排序** ⭐⭐⭐⭐4.1.6 **希尔排序** ⭐⭐⭐⭐4.1.7 **归并排序** ⭐⭐⭐⭐4.1.8 **快速排序**

《西瓜书》第四章 决策树 笔记

文章目录 4.1 基本流程4.1.1 组成4.1.2 目的4.1.3 策略4.1.4 算法 4.2 划分选择4.2.1信息增益-ID3决策树4.2.1.1 信息熵4.2.1.1 信息增益 4.2.2 增益率-C4.5决策树4.2.3 基尼指数-CART决策树4.2.3.1 基尼值4.2.3.2 基尼指数 4.3 剪枝处理4.3.1 预剪枝4.3.2 后剪枝 4.4 连续与缺失值4.4.1