首页
社区
课程
招聘
[求助]文件COPY监控
发表于: 2007-8-15 23:00 9340

[求助]文件COPY监控

2007-8-15 23:00
9340

最近又接到一个新的活,就是如何自己的文件通过网络被COPY到共享目录下里,

兄弟姐妹帮忙想个主意.

  我的目标是,如果自己的文件通过网络被COPY到别人的计算机的共享文件夹时,记录在本地的文件内,然后统一上传至服务器上.


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有回答吗?
分析了一下主要有两个方向的监控:
1.自己主动将本地文件COPY到共享机器上.从而将文件传输出去.
2.自己将文件共享,能过网络访问,将文件COPY到别的机器上.

现在目标是想实现这两种监控.
fileMon  用的是驱动,只能监控文件,但是不能监控网络,新的FileMON 有这个功能.
2007-8-16 21:26
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
由于主机被访问的时候没有走API层.所以用文件驱动是监控不到的,现在分析后只能采用报文分析法了.
2007-8-20 20:51
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没人回复,只能自己帮忙顶了.
从现在分析看.只要能从两个方面解析CIFS协议就应该能很好的监控通过网络传输的文件.
哪位有分析过CIFS协议的帮忙一下.
2007-8-22 22:54
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
5
Windows有用户态的监控函数,不要搞这么累 又不是搞杀毒,没有必要用驱动。
2007-8-23 00:55
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你说的用户态函数是哪个?
2008-1-8 22:28
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
7
试试这个FindFirstChangeNotification
2008-1-9 00:09
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
FindFirstChangeNotification只是一个通知,达不到“监控”得“控”的标准

另外这个函数以及其他几个用户态NOTIFY函数都可以理解未仅仅是FS的一个非严格的回掉函数,同时复制100个小文件试试,你会发现有漏掉的,不能真正用于产品

以下引自taurus.wang@develop.com在某处的回帖
//---------------------------------------------------
//从IrpStackLocation中判断来自网络的文件访问
BOOLEAN SfIsFromNetAccess(
  PIO_STACK_LOCATION IrpSp
  )
{
  NTSTATUS status;
  PACCESS_TOKEN pToken = NULL;
  PTOKEN_SOURCE pTokenSrc = NULL ;
  PSECURITY_SUBJECT_CONTEXT secSubCtx;
  //PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
  
  secSubCtx = &(IrpSp->Parameters.Create.SecurityContext->AccessState->SubjectSecurityContext);

  if (secSubCtx->ClientToken != NULL || secSubCtx->PrimaryToken != NULL)   {
      pToken = SeQuerySubjectContextToken(secSubCtx);
  }
  
  if (pToken == NULL)   {
      //KdPrint(("SeQuerySubjectContextToken Errorn"));
      return FALSE;
  }

   //
   // Get TokenSource Name If SourceName is "NtLmSsp" it was logged-in via Lanmanager,
   // "User32" represents localy logged-in users.
   //
   __try
   {
       status = SeQueryInformationToken(pToken,TokenSource,&pTokenSrc);
       if (NT_SUCCESS(status)) {
      pTokenSrc->SourceName[TOKEN_SOURCE_LENGTH-1] = 0x00;
      KdPrint(("Token Name :%s Len:%dn",pTokenSrc->SourceName,strlen(pTokenSrc->SourceName)));
  
      if (_stricmp(pTokenSrc->SourceName,"NtLmSsp") == 0 ) {
          KdPrint(("NetWork Access Token Findn"));
          return TRUE;
      }
       } else {
      KdPrint(("SeQueryInformationToken Error:0x%xn",status));
       }
   }
   __finally {
  ExFreePool(pTokenSrc);
   }
  return FALSE;
}
2008-1-9 12:23
0
游客
登录 | 注册 方可回帖
返回
//