背景 接上篇(记一次好玩的操作(内网远程控制主机启动))想一探究,自己做一个wol远程控制主机启动的小程序。 获取wol发出的数据包 wol 的全称是wake on lan,顾名思义,这肯定是一个网络程序,那么抓个包看看吧(由于不知道其用的什么协议,所以只能盲人摸象)。启动wireshark之后立刻执行 wol 00:24:1d:b2:3c:ca 命令,然后在wireshark界面中找到了如下标蓝的那条数据包(因为看他里边有个WOL字样=、=) 至此,得到的信息是:原来WOL不光是一个程序,它还是一个协议啊。 协议分析 获取到数据包之后开始分析其包结构,如下图: 找到我们需要的信息如下: 运输层协议:UDP IP :255.255.255.255 端口:40000(实验证明,这里只要是合法端口都可以使用,维基百科上说一般使用端口7或者端口9) 协议内容:前六个字节为 ffffffffffff,紧接着重复十六次对应机器的MAC地址即可。 代码实现 有了协议,代码实现起来就简单多了(代码比较简 继续阅读 >>


张根 17/06/26 22:43:36
背景   最近搬进了3+1,发现有一点台式电脑可以玩玩,电脑本身也比较老了,所以就想着装个服务器吧,平时在实验室用Windows时如果临时想用用Linux的话也可以连接上来用用,也就不用忍受巨卡无比的腾讯云了。   最小安装完Centos 7之后想着如果能远程控制主机启动(一条命令or一个脚本)那简直是太棒了。Google之后发现可以使用wol来远程启动它(前提是电脑支持这样做)。 实施 1. 硬件检查&开启wake on lan开关 使用 ethtool 命令检查电脑是否支持从网卡启动,使用格式为:ethtool 网卡名称(可以使用 ifconfig 命令来看使用的网卡名称是什么),例如: 如果输出的结果中有Wake-on选项,则表明支持远程启动。该选项如果为 g 则表明远程启动已经开启,可以通过网卡启动计算机,如果该选项为 d 则表明禁用wake on lan。如果不幸为 d 的话就需要使用如下命令来开启 ethtool -s 网卡名 wol g 当然,通过这种方式开启只能保持一次,下次重启之后该选项又会被关闭,此 继续阅读 >>


张根 17/06/20 22:22:51
原文地址:http://blog.chinaunix.NET/uid-26000296-id-4161684.html PS:最近在阅读大牛博客的时候大牛提到了一款用于在Linux下检测程序内存泄漏的工具感觉挺好用的,遂将查到的资料做以记录(IBM这篇文章也很不错应用 Valgrind 发现 Linux 程序的内存问题) 一、 安装 1. autoconf # wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz  # tar -zxvf autoconf-2.69.tar.gz  # cd autoconf-2.69 # ./configure # make; make install 2. automake # wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz # tar -zxvf automake-1.14.tar.gz  # cd automake-1.14 # ./bootstrap 继续阅读 >>


张根 17/01/16 13:30:44
  在WireShark协议分析的学习过程学习了ARP协议的数据包格式,所以准备自制一个小小的ARP欺骗工具。在制作该工具前需要掌握如下知识:    一、ARP协议内容   ARP(Address Resolution Protocol)协议的基本功能是通过IP地址找到对应的硬件地址,ARP协议的工作过程是(假设A主机(IP:192.168.1.110、MAC:0A:11:22:33:44:01)要和B主机(IP:192.168.1.120、MAC:0A:11:22:33:44:02)进行通信):   1、A主机在自己的ARP缓存中查找是否有B主机的ARP缓存。   2、如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.120的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。   3、主机B确定ARP请求中的IP地址与自己的IP地 继续阅读 >>


张根 16/08/03 14:18:22
  WireShark有捕获过滤器和显示过滤器两种过滤器,捕获过滤器可以在捕获数据包的时候就进行过滤,使得捕获的时候只进行过滤的数据捕获。显示过滤器在显示的时候进行过滤,使得显示的时候将捕获到的数据进行显示。   这两种过滤方式的优势显而易见,第一种可以减少捕获的数据包数量,从而减少系统的负荷。第二种可以捕获更多的数据包,只是在显示的时候过滤,这样可以在以后的分析中如果需要其他数据信息的话可以直接更改显示过滤规则将其他的数据包找到。 一、捕获过滤器      打开捕获过滤器的方法是:点击Capture –>Interfaces,选择好网卡之后点击Option按钮在Capture Filtera旁边的输入框里就可以输入表达式了。 1、基本语法   由限定词后跟一个ID名字或数字组成一个原语,一个表达式可以包含多个原语。例如:dst host 192.168.0.1 && tcp port 80中dst host 192.168.0.1组成一个原语,dst和host 是这个原语中的限定词192.168.0.1是ID,& 继续阅读 >>


张根 16/07/30 16:23:20
  WireShark作为简明的网络嗅探工具一直受到广大程序员的追捧,为了更好学习网络,所以准备学习一下这个神奇的工具,现总结如下。 一、网络嗅探器工作原理 收集:从网卡上收集二进制信息(将网卡设置成混杂模式完成抓包) 转换:将捕获的二进制信息转换成可读形式。 分析:对捕获和转换后的数据进行分析。 二、七层OSI模型 OSI参考模型是由国际化标准组织ISO提出的,OSI参考模型只是一个行业建议标准,协议开发并不需要严格遵守此参考模型。 1. 应用层:OSI参考模型的最上层,为用户访问网络资源提供一种手段,是离用户最近的一层 2. 表示层:把数据转换为能与接收者的系统格式兼容并适合传输的格式。 3. 会话层:负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。 4. 传输层:把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。 5. 网络层:决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。 6. 数据链路层:负责网络寻址、错误侦测和改错。 继续阅读 >>


张根 16/07/30 10:20:45
一、EXT2文件系统文件组织形式   EXT2文件系统是Linux系统中广泛使用的文件系统,该文件系统是一种索引式文件系统,它将分区分为inode和block,它会给每个文件分配一个inode,inode中存储文件的一些属性信息,block中存储文件真正的内容,一个block的大小有1k、4k等大小,一个block中只能存储一个文件,比如现在有一个文件占据了一个block的1B大小,那么这个block剩余的大小也无法分配给其他文件使用。大体存储结构如下图所示:          因为一个分区可能很大,可能会分成很多很多个block,为了便于管理,系统将这些block分成多个block组,每个block组中存储当前组的信息和当前block组的block,如下图:            每个分区都有如下几个项目:   引导扇区:每个分区前的引导扇区   super block:超级块,它记录的是整个文件系统的信息,文件系统的类型,inode数量,block数量等,每个分区的super block是相同的   文件系统描述:描述每个block group 的开 继续阅读 >>


张根 16/07/25 22:17:01
  文件在Linux乃至整个计算机系统中都是一个非常重要的概念。在Linux的系统编程中文件也是作为基础出现的,理解文件和文件系统有助于我们写出更安全、更高效、可读性更强的代码。学完Linux文件操作也一年了,上周因为要给小组大一的同学总结文件操作就又过了一遍感觉收获颇丰。在此做个记录。 一、文件系统简介      1、硬盘的组成     文件是一堆有序数据的集合,文件的最终形态是存储在硬盘上,为了更好的理解文件系统,这里简单先介绍一下数据在硬盘上的存储。硬盘由盘片、磁头、主轴等组成(平面结构如下图)。盘面上排列着许多纳米级的磁粉,这些磁粉通过磁头的磁化可以排列成不同的形态。通过 磁粉的N、S两极来记录数字信息里边的0、1。                                  平面结构             继续阅读 >>


张根 16/07/25 17:14:35
  自从小组纳新到现在一直没有学什么东西,鼓捣了几次系统,体验了一下Fedora,最终还是选择了Centos,看到学长炫酷的SS管理,自己也把原来的格掉重新搭了一个。说好的一天一道LeetCode也荒废了,博客也好久好久没有更新了,真是罪过、罪过。现在纳新早已结束,是时候拾起自己的老本行了。周末学习了一下MySQL的C语言API,试着用C++简单的封装了一下,现在做个记录,以防遗忘。 一、重要数据结构介绍   1、MYSQL:这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。   2、MYSQL_RES :这个结构代表返回行的一个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。从查询返回的信息在本章下文称为结果集合。   3、MYSQL_ROW:这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节) 行通过调用mysql 继续阅读 >>


张根 16/06/05 02:20:10
联结: 一种机制,用来在一条SELECT语句中关联表,因此称之为联结。它在数据库中不存在。联结由MySQL根据需要建立,它存在于查询的执行过程中。 创建联结: (使用WHERE联结) SELECT vend_name, prod_name, prod_price FROM vendors, products WHERE vendors.vend_id = products.vend_id ORDER BY vend_name, prod_name; (保证所有联结都有WHERE子句,不然查询到的结果是两个表的笛卡尔积(第一个表的行乘以第二个表的行)) (使用INNER JOIN ... ON ...联结) SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id ORDER BY vend_name, prod_name; MySQL可以联结多个表,但是联结处理有可能非常耗费资源,因此不要 继续阅读 >>


张根 16/04/21 22:17:45