OpenSSL的API使用起来与我们常用的普通网络通信函数大同小异,主要分为初始化阶段、密钥载入及验证阶段、创建SSL(类似于文件描述符(套结字)创建函数socket)阶段、绑定套结字阶段(类似于bind函数)、请求建立连接阶段(客户端特有,类似于connect)、接受连接请求阶段(服务端特有,类似于accept函数)、数据收发阶段(类似于read和write)、结束连接阶段以及结束监听阶段(类似于close)。为了让SSL通信过程更加清晰明了,故自己用C语言封装了5个主要函数,让SSL通信流程为开发者快速掌握、一目了然。
阅读全文
不知道大家是否使用过网络数据抓包工具WireShark,Wireshark能够捕捉出入网卡的每一帧网络包,并能够详细列出网络包的源IP地址、目的IP地址、端口号、协议类型以及数据内容等信息。在数据(Data)一栏,Wireshark按照下图样式将数据(Data)按十六进制以及字符的形式打印出来。这样的打印信息清晰而明了,下面我们就来编写一个格式化数据输出函数hexdump吧。 阅读全文
普通的TCP通信无法保证数据的安全,它随时可能被第三方截获而泄漏通信双方之间的隐私,这显然是我们不希望看到的,尤其在跟用户名、密码、个人信息息息相关的通信过程(如网上银行交易、机密文件传输等等)尤其看重数据交互的隐秘性,所以我们常常用SSL协议来建立安全保密的通信,SSL协议能够保证交互双方的数据按密文方式传输,第三方在没有私钥的情况下几乎无法破解,从而到达保密的目的。究竟SSL是如何交互数据来确保安全的,很多人却不得而知,为了解答大家的疑惑,这里详细介绍一下SSL的交互过程。 阅读全文
我们在开发程序提供接口给第三方使用时,为了隐藏函数API的实现细节,最常用的办法便是将这些函数API封装成函数库以后提供给第三方调用。而这种函数库又分为静态库与动态库,所谓静态库就是在程序编译的时候,编译器会将需要调用的函数块直接整合到目标代码中,程序运行时对其不产生依赖。而动态库编译时则不会被整合到可执行文件中,在程序运行的过程中才会从动态库中加载相应的函数。 阅读全文
想必大家都有躺在床上玩手机的时候,为了阅读方便,我们不得不恻翻手机,使得一行行的文字跟视线平行,这时候问题就来了,手机恻翻以后,由于重力感应器察觉到这一变化,屏幕上的UI界面也跟着切入了横屏模式,文字跟视线保持垂直,背离了我们希望阅读方便的目的,所以我们需要取消手机的自动横屏功能。貌似现在Symbian跟Android在“设置”内都能找到“取消自动横屏”这一功能,但运行了iOS系统的iPhone在“设置”内就找不到这一选项,让很多新手犯了愁。 阅读全文
Linux内核与用户空间通信的方式目前主要有9种,分别是内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs。Netlink是一种特殊的文件描述符(套结字),为2.6.14及更高版本的Linux所特有,是一种在内核与用户应用间进行双向数据交互的便捷方式,用户态应用调用标准的套结字API 就可以使用netlink提供的强大功能,内核态需要调用专门的内核 API 来使用netlink。Netlink应用已经相当广泛,例如,Linux系统的网络防火墙分为内核态的netfilter和用户态的iptables,netfilter与iptables的数据交换就是通过Netlink机制来完成。
阅读全文
在Linux下,某些涉及到底层或系统级操作的程序,如tcpdump、wireshark等,我们不得不以root(高级用户)权限运行方能正常工作,我们在设计居如此类的程序时,能否在程序内部判断程序自身是否以root(高级用户)权限运行,以便于提示用户切换到高级权限下运行呢?答案是肯定的。 阅读全文
1、串(String)(或字符串)是由零个或多个字符组成的有序序列。
2、串赋值StrAssign、串比较StrCompare、求串长StrLength、串联接Concat以及求字串SubString 5种操作构成串类型的最小操作子集,即这些操作不可能利用其他串操作来实现,反之,其他串操作(除串清除ClearString跟串销毁DestoryString外)均可在这个最小操作子集上实现。
3、利用求串长StrLength、串比较StrCompare跟求字串SubString实现搜索指定字串的C语言伪代码实现如下: 阅读全文