网络数据包监视程序开发(八)

        终于把一个“小小”的问题给解决了。其实说来也不是什么大问题,只是因为自己对java语言中的一些变量类型掌握不好,没有搞清它的数据表示范围等属性。这次把我弄得有点烦的是byte类型。

        从jpcap里抓取下来的data是以byte[ ]的方式返回的,所以要对data进行分析的话,就得把byte[ ]这个数组加以处理。byte是8位有符号的,表示范围:-128~~127。不过,我要分析的数据不是要用十进制表示的,而是十六进制,如果用十六进制表示data[ ]数据的元素的话,接下来的与QQ协议之间的对比分析就要方便许多了。为了有比较好的可读性,还得把中间结果的输出整理一下,因为java运行出来的结果中,十六进制数据2,会表示成2,十六进制数据2e,会表示成2e,十六进制数据ee,会表示成ffffffee,就这三种情况,表示格式都不一样,另外在java中,定义一个十六进制的数据,要在数据前加0x,比如:byte bb = 0x02;

        下面的是打印byte[ ]数组元素的程序片断:

private void printByteDown(byte temp[]) throws IOException{
     int h=0;
     String hex;
     for(int i=0;i<temp.length;i++){
           hex = Integer.toHexString((byte)temp[i]);
           if(hex.length()==8)  hex = hex.substring(6,8);
           else if(hex.length()==1) hex = "0"+hex;
           System.out.print(hex+"  ");
           h++;
           if(h%8==0)
                 System.out.println();
     }

}

其实大部分都是简单的控制输出格式代码。只是程序中有一个小小的细节需要注意:比如

hex = Integer.toHexString((byte)temp[i]);

也许把(byte)这个类型转换去掉,会有不同的结果。

        不管怎么说,这个都是一个很小很小的问题,只能说明基础掌握不太好。接下去的就是分析QQ协议了,找到密码那个字段,然后看能不能解密出来,看起来很难,因为如果QQ密码设成8位以上,或者不全为数字的话,也许暴力破解会很吃力,是否有其他的什么方法可以考虑考虑呢?比如说:如果有QQ密码保护,当你丢失密码的时候,系统会给你一封重设密码的email,里面有一个链接,这个链接是否会有什么启发呢?研究研究吧。还要继续了。


你可能感兴趣的:(java,网络,qq,byte,hex,程序开发)