关于最近给一家企业做的文档保全系统的技术整理(1)

上个月刚刚完成了一个项目,该项目用于保护企业中的图纸等文档资源的保密,防止员工通过u盘拷贝等手段泄露企业资源。

现在将该项目中遇到的一些技术点整理出来,和大家一起学习和参考。

  1. 1、获取局域网内其他主机Mac地址的方法
  2.  public class NetHelper
        {
            [DllImport("Iphlpapi.dll")]
            private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
            [DllImport("Ws2_32.dll")]
            private static extern Int32 inet_addr(string ip);
    
    
            /// <summary>
            /// 获取远程IP(不能跨网段)的MAC地址
            /// </summary>
            /// <param name="hostip"></param>
            /// <returns></returns>
            public static string GetMacAddress(string hostip)
            {
                string Mac = "";
                try
                {
                    Int32 ldest = inet_addr(hostip); //将IP地址从点数格式转换成无符号长整型
                    Int64 macinfo = new Int64();
                    Int32 len = 6;
                    SendARP(ldest, 0, ref macinfo, ref len);
                    string TmpMac = Convert.ToString(macinfo, 16).PadLeft(12, '0');//转换成进制注意有些没有十二位
                    Mac = TmpMac.Substring(0, 2).ToUpper();//
                    for (int i = 2; i < TmpMac.Length; i = i + 2)
                    {
                        Mac = TmpMac.Substring(i, 2).ToUpper() + "-" + Mac;
                    }
                }
                catch (Exception Mye)
                {
                    DSLog.Add("获取远程主机MAC地址异常:" + Mye.Message);
                   // throw new Exception("获取远程主机MAC地址异常:" + Mye.Message);
                }
                return Mac;
            }
    
        }
    说明:该类提供一个静态方法GetMacAddress用于获取同网段中远程主机的Mac地址,返回的Mac地址形式为:00-00-00-00-00-00
     

2、以二进制序列化方式打开和存储信息在数据文件中

 public class BinarySerializer
    {
        public static void Serialize(object data, string filePath)
        {
            try
            {
                //打开文件
                StreamWriter fs = new StreamWriter(filePath, false);
                try
                {
                    // 创建其支持存储区为内存的流
                    MemoryStream streamMemory = new MemoryStream();
                    // 以二进制格式将对象或整个连接对象图形序列化或反序列化
                    BinaryFormatter formater = new BinaryFormatter();
                    //将这个对象序列化到内存流中
                    formater.Serialize(streamMemory, data);
                    //先转换为字符串的形式
                    string binaryData = Convert.ToBase64String(streamMemory.GetBuffer());

                    //将数据写入到文件
                    fs.Write(binaryData);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    fs.Flush();
                    fs.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // 反序列化,从文件序列化一个对象
        public static object Deserialize(string filePath)
        {
            object data = new object();
            try
            {
                //打开文件
                StreamReader sr = new StreamReader(filePath);
                try
                {
                    MemoryStream streamMemory;
                    BinaryFormatter formatter = new BinaryFormatter();
                    //以字符串的形式读取数据
                    string cipherData = sr.ReadToEnd();

                    byte[] binaryData = Convert.FromBase64String(cipherData);
                    //反序列化为对象
                    streamMemory = new MemoryStream(binaryData);
                    data = formatter.Deserialize(streamMemory);
                }
                catch
                {
                    // 不能得到数据,设为空
                    data = null;
                }
                finally
                {
                    //最后关闭文件
                    sr.Close();
                }

            }
            catch
            {
                // 不能得到数据,设为空
                data = null;
            }
            //返回数据
            return data;
        }
    }

 

该类的定义要添加如下命名空间的引用:

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

说明:

假如我要将一个配置字符串信息写入一个数据文件

用法如下:

try
            {
                BinarySerializer.Serialize("要写入数据文件的配置信息字符串", "数据文件的完整路径" );
                return true;
            }
            catch (Exception ex)
            {
                throw new Exception("将系统设置写入文档时异常:" + ex.Message);
            }

要读取该配置字符串信息的时候用法:

   string configString = BinarySerializer.Deserialize(APPInfo.ClientConfigFile).ToString();
   return Convert(configString);

用记事本直接打开配置文件将看到的是乱码。

posted @ 2010-07-14 15:16  micy  阅读(280)  评论(0)    收藏  举报