LyShark®

信息安全电子刊物出版品牌

Base64是一种二进制到文本的编码方案,用于将二进制数据转换为`ASCII`字符串格式。它通过将二进制数据流转换为一系列`64`个字符来工作,这些字符都可以安全地传输到设计用于处理文本数据的系统中。如下代码中我们使用Boost中提供的`base64_from_binary`头文件实现两个函数,其中`Base64Decode`函数接收一个字符串并对其进行解压缩操作输出解密后的原始字符串内容,其次`Base64Encode`函数用于将一个原始数据包压缩处理,有了这两个函数的支持,我们只需要在调用发送函数之前对数据进行压缩,在接收数据后在使用对等的函数对其进行解压缩即可,如下是该案例的完整实现。

阅读全文 »

命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个`run_command`函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符串,当接收到结束标志`goodbye lyshark`时则说明数据传输完成则退出,客户端使用`exec_command`函数,该函数通过`_popen`函数执行一条命令,并循环`fgets`读取字符串发送给服务端,最终传输一个结束标志完成通信。

阅读全文 »

Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具,它能够处理和嗅探各种网络数据包。能够很容易的创建,发送,捕获,分析和操作网络数据包,包括TCP,UDP,ICMP等协议,此外它还提供了许多有用的功能,例如嗅探网络流量,创建自定义协议和攻击网络的安全测试工具。使用Scapy可以通过Python脚本编写自定义网络协议和攻击工具,这使得网络安全测试变得更加高效和精确。

阅读全文 »

多线程服务依赖于两个通用函数,首先`boost::bind`提供了一个高效的、简单的方法来创建函数对象和函数对象适配器,它的主要功能是提供了一种将函数和它的参数绑定到一起的方法,这种方法可以将具有参数的成员函数、普通函数以及函数对象转化为不带参数的函数对象。

阅读全文 »

TCP和UDP是两种常见的Internet协议,TCP是一种可靠的、面向连接的协议,UDP则是不可靠的、无连接的协议。 TCP适合传输数据量大、对数据传输准确性要求高的应用,而UDP适合传输数据量小、传输速度快、对传输可靠性要求低的应用。

阅读全文 »

在同步模式下,程序发起`I/O`操作时,调用相应的同步`I/O`函数将操作添加到`io_service`中,该请求被添加到`io_service`的请求队列中等待处理。然后,`io_service`就会不断地从队列中取出请求,并将请求传递给操作系统进行处理,直到该请求被处理完成。程序在此期间会一直处于阻塞等待的状态,直到操作完成或者因为某种原因导致操作失败。

阅读全文 »

Boost ASIO库是一个基于C++语言的开源网络编程库,该库提供了成熟、高效、跨平台的网络API接口,并同时支持同步与异步两种模式,ASIO库提供了多重I/O对象、异步定时器、可执行队列、信号操作和协程等支持,使得开发者可以轻松地编写可扩展的高性能网络应用程序,同时保持代码简洁、易于维护。

阅读全文 »

python 进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。在选择使用进程还是线程时,需要根据具体场景和需求进行权衡和选择。如果任务需要充分利用多核 CPU,且任务之间互不影响,可以选择多进程;如果任务之间需要共享资源和数据,可以选择多线程。同时,需要注意在 python 中使用多线程时,由于 GIL 的存在,可能无法实现真正的并行。

阅读全文 »

组播模式相比单播模式可以提高网络的效率和带宽利用率,因为组播数据包只需要发送一次,就可以被多个接收者接收,而不需要每个接收者都单独发送一份数据包。这在需要同时向多个接收者发送相同数据的场景下特别有用,如视频会议、在线教育、流媒体等。组播模式可以减少网络拥塞,降低网络延迟,并且可以减少网络中的冗余数据。

阅读全文 »

TLS(Thread Local Storage)用来在进程内部每个线程中存储私有的数据。每个线程都会拥有独立的`TLS`存储空间,可以在`TLS`存储空间中保存线程的上下文信息、变量、函数指针等。TLS其目的是为了解决多线程变量同步问题,声明为TLS变量后,当线程去访问全局变量时,会将这个变量拷贝到自己线程中的TLS空间中,以防止同一时刻内多次修改全局变量导致变量不稳定的情况。

阅读全文 »