⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _smb.c

📁 This directory contains source code for tcpdump, a tool for network monitoring and data acquisition
💻 C
📖 第 1 页 / 共 3 页
字号:
  if (f2)
       fdata (data + 2, f2, MIN (data + 2 + SVAL (data, 0), maxbuf));
  else print_data (data + 2, MIN (SVAL(data,0), PTR_DIFF(maxbuf, data+2)));
}

static void print_sesssetup (uchar *words, uchar *data, uchar *buf, uchar *maxbuf)
{
  int    wcnt = CVAL (words, 0);
  uchar *f1   = NULL, *f2 = NULL;

  if (request)
  {
    if (wcnt == 10)
         f1 = "Com2=[w]\nOff2=[d]\nBufSize=[d]\nMpxMax=[d]\nVcNum=[d]\n"
              "SessionKey=[W]\nPassLen=[d]\nCryptLen=[d]\nCryptOff=[d]\n"
              "Pass&Name=\n";
    else f1 = "Com2=[B]\nRes1=[B]\nOff2=[d]\nMaxBuffer=[d]\nMaxMpx=[d]\n"
              "VcNumber=[d]\nSessionKey=[W]\nCaseInsensitivePasswordLength=[d]\n"
              "CaseSensitivePasswordLength=[d]\nRes=[W]\nCapabilities=[W]\n"
              "Pass1&Pass2&Account&Domain&OS&LanMan=\n";
  }
  else
  {
    if (CVAL (words, 0) == 3)
    {
      f1 = "Com2=[w]\nOff2=[d]\nAction=[w]\n";
    }
    else if (CVAL (words, 0) == 13)
    {
      f1 = "Com2=[B]\nRes=[B]\nOff2=[d]\nAction=[w]\n";
      f2 = "NativeOS=[S]\nNativeLanMan=[S]\nPrimaryDomain=[S]\n";
    }
  }

  if (f1)
       fdata (words + 1, f1, MIN (words + 1 + CVAL(words,0) * 2, maxbuf));
  else print_data (words + 1, MIN (CVAL (words,0)*2, PTR_DIFF(maxbuf, words+1)));

  if (f2)
       fdata (data + 2, f2, MIN (data + 2 + SVAL (data, 0), maxbuf));
  else print_data (data + 2, MIN (SVAL (data,0), PTR_DIFF(maxbuf, data+2)));
}


static struct smbfns smb_fns[] = {
  {-1, "SMBunknown", 0, DEFDESCRIPT},

  {SMBtcon, "SMBtcon", 0,
   {NULL, "Path=[Z]\nPassword=[Z]\nDevice=[Z]\n",
    "MaxXmit=[d]\nTreeId=[d]\n", NULL,
    NULL}},


  {SMBtdis, "SMBtdis", 0, DEFDESCRIPT},
  {SMBexit, "SMBexit", 0, DEFDESCRIPT},
  {SMBioctl, "SMBioctl", 0, DEFDESCRIPT},

  {SMBecho, "SMBecho", 0,
   {"ReverbCount=[d]\n", NULL,
    "SequenceNum=[d]\n", NULL,
    NULL}},

  {SMBulogoffX, "SMBulogoffX", FLG_CHAIN, DEFDESCRIPT},

  {SMBgetatr, "SMBgetatr", 0,
   {NULL, "Path=[Z]\n",
    "Attribute=[A]\nTime=[T2]Size=[D]\nRes=([w,w,w,w,w])\n", NULL,
    NULL}},

  {SMBsetatr, "SMBsetatr", 0,
   {"Attribute=[A]\nTime=[T2]Res=([w,w,w,w,w])\n", "Path=[Z]\n",
    NULL, NULL, NULL}},

  {SMBchkpth, "SMBchkpth", 0,
   {NULL, "Path=[Z]\n", NULL, NULL, NULL}},

  {SMBsearch, "SMBsearch", 0,
   {"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\n",
    "Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},


  {SMBopen, "SMBopen", 0,
   {"Mode=[w]\nAttribute=[A]\n", "Path=[Z]\n",
    "Handle=[d]\nOAttrib=[A]\nTime=[T2]Size=[D]\nAccess=[w]\n", NULL,
    NULL}},

  {SMBcreate, "SMBcreate", 0,
   {"Attrib=[A]\nTime=[T2]", "Path=[Z]\n",
    "Handle=[d]\n", NULL,
    NULL}},

  {SMBmknew, "SMBmknew", 0,
   {"Attrib=[A]\nTime=[T2]", "Path=[Z]\n",
    "Handle=[d]\n", NULL,
    NULL}},

  {SMBunlink, "SMBunlink", 0,
   {"Attrib=[A]\n", "Path=[Z]\n", NULL, NULL, NULL}},

  {SMBread, "SMBread", 0,
   {"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
    "Count=[d]\nRes=([w,w,w,w])\n", NULL, NULL}},

  {SMBwrite, "SMBwrite", 0,
   {"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
    "Count=[d]\n", NULL, NULL}},

  {SMBclose, "SMBclose", 0,
   {"Handle=[d]\nTime=[T2]", NULL, NULL, NULL, NULL}},

  {SMBmkdir, "SMBmkdir", 0,
   {NULL, "Path=[Z]\n", NULL, NULL, NULL}},

  {SMBrmdir, "SMBrmdir", 0,
   {NULL, "Path=[Z]\n", NULL, NULL, NULL}},

  {SMBdskattr, "SMBdskattr", 0,
   {NULL, NULL,
    "TotalUnits=[d]\nBlocksPerUnit=[d]\nBlockSize=[d]\nFreeUnits=[d]\nMedia=[w]\n",
    NULL, NULL}},

  {SMBmv, "SMBmv", 0,
   {"Attrib=[A]\n", "OldPath=[Z]\nNewPath=[Z]\n", NULL, NULL, NULL}},

 /* this is a Pathworks specific call, allowing the changing of the root path
  */
  {pSETDIR, "SMBsetdir", 0,
   {NULL, "Path=[Z]\n", NULL, NULL, NULL}},

  {SMBlseek, "SMBlseek", 0,
   {"Handle=[d]\nMode=[w]\nOffset=[D]\n", "Offset=[D]\n", NULL, NULL}},

  {SMBflush, "SMBflush", 0,
   {"Handle=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBsplopen, "SMBsplopen", 0,
   {"SetupLen=[d]\nMode=[w]\n", "Ident=[Z]\n", "Handle=[d]\n", NULL, NULL}},

  {SMBsplclose, "SMBsplclose", 0,
   {"Handle=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBsplretq, "SMBsplretq", 0,
   {"MaxCount=[d]\nStartIndex=[d]\n", NULL,
    "Count=[d]\nIndex=[d]\n",
    "*Time=[T2]Status=[B]\nJobID=[d]\nSize=[D]\nRes=[B]Name=[s16]\n",
    NULL}},

  {SMBsplwr, "SMBsplwr", 0,
   {"Handle=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBlock, "SMBlock", 0,
   {"Handle=[d]\nCount=[D]\nOffset=[D]\n", NULL, NULL, NULL, NULL}},

  {SMBunlock, "SMBunlock", 0,
   {"Handle=[d]\nCount=[D]\nOffset=[D]\n", NULL, NULL, NULL, NULL}},

 /* CORE+ PROTOCOL FOLLOWS
  */

  {SMBreadbraw, "SMBreadbraw", 0,
   {"Handle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nRes=[d]\n",
    NULL, NULL, NULL, NULL}},

  {SMBwritebraw, "SMBwritebraw", 0,
   {"Handle=[d]\nTotalCount=[d]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\n|DataSize=[d]\nDataOff=[d]\n",
    NULL, "WriteRawAck", NULL, NULL}},

  {SMBwritec, "SMBwritec", 0,
   {NULL, NULL, "Count=[d]\n", NULL, NULL}},

  {SMBwriteclose, "SMBwriteclose", 0,
   {"Handle=[d]\nCount=[d]\nOffset=[D]\nTime=[T2]Res=([w,w,w,w,w,w])", NULL,
    "Count=[d]\n", NULL, NULL}},

  {SMBlockread, "SMBlockread", 0,
   {"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
    "Count=[d]\nRes=([w,w,w,w])\n", NULL, NULL}},

  {SMBwriteunlock, "SMBwriteunlock", 0,
   {"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
    "Count=[d]\n", NULL, NULL}},

  {SMBreadBmpx, "SMBreadBmpx", 0,
   {"Handle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nRes=[w]\n",
    NULL,
    "Offset=[D]\nTotCount=[d]\nRemaining=[d]\nRes=([w,w])\nDataSize=[d]\nDataOff=[d]\n",
    NULL, NULL}},

  {SMBwriteBmpx, "SMBwriteBmpx", 0,
   {"Handle=[d]\nTotCount=[d]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\nDataSize=[d]\nDataOff=[d]\n",
    NULL,
    "Remaining=[d]\n", NULL, NULL}},

  {SMBwriteBs, "SMBwriteBs", 0,
   {"Handle=[d]\nTotCount=[d]\nOffset=[D]\nRes=[W]\nDataSize=[d]\nDataOff=[d]\n", NULL,
    "Count=[d]\n", NULL, NULL}},

  {SMBsetattrE, "SMBsetattrE", 0,
   {"Handle=[d]\nCreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]", NULL,
    NULL, NULL, NULL}},

  {SMBgetattrE, "SMBgetattrE", 0,
   {"Handle=[d]\n", NULL,
    "CreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]Size=[D]\nAllocSize=[D]\nAttribute=[A]\n", NULL, NULL}},

  {SMBtranss, "SMBtranss", 0, DEFDESCRIPT},
  {SMBioctls, "SMBioctls", 0, DEFDESCRIPT},

  {SMBcopy, "SMBcopy", 0,
   {"TreeID2=[d]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n",
    "CopyCount=[d]\n", "|ErrStr=[S]\n", NULL}},

  {SMBmove, "SMBmove", 0,
   {"TreeID2=[d]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n",
    "MoveCount=[d]\n", "|ErrStr=[S]\n", NULL}},

  {SMBopenX, "SMBopenX", FLG_CHAIN,
   {"Com2=[w]\nOff2=[d]\nFlags=[w]\nMode=[w]\nSearchAttrib=[A]\nAttrib=[A]\nTime=[T2]OFun=[w]\nSize=[D]\nTimeOut=[D]\nRes=[W]\n", "Path=[S]\n",
    "Com2=[w]\nOff2=[d]\nHandle=[d]\nAttrib=[A]\nTime=[T2]Size=[D]\nAccess=[w]\nType=[w]\nState=[w]\nAction=[w]\nFileID=[W]\nRes=[w]\n", NULL, NULL}},

  {SMBreadX, "SMBreadX", FLG_CHAIN,
   {"Com2=[w]\nOff2=[d]\nHandle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nCountLeft=[d]\n", NULL,
    "Com2=[w]\nOff2=[d]\nRemaining=[d]\nRes=[W]\nDataSize=[d]\nDataOff=[d]\nRes=([w,w,w,w])\n", NULL, NULL}},

  {SMBwriteX, "SMBwriteX", FLG_CHAIN,
   {"Com2=[w]\nOff2=[d]\nHandle=[d]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nCountLeft=[d]\nRes=[w]\nDataSize=[d]\nDataOff=[d]\n", NULL,
    "Com2=[w]\nOff2=[d]\nCount=[d]\nRemaining=[d]\nRes=[W]\n", NULL, NULL}},

  {SMBlockingX, "SMBlockingX", FLG_CHAIN,
   {"Com2=[w]\nOff2=[d]\nHandle=[d]\nLockType=[w]\nTimeOut=[D]\nUnlockCount=[d]\nLockCount=[d]\n",
    "*Process=[d]\nOffset=[D]\nLength=[D]\n",
    "Com2=[w]\nOff2=[d]\n"}},

  {SMBffirst, "SMBffirst", 0,
   {"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n",
    "Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},

  {SMBfunique, "SMBfunique", 0,
   {"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n",
    "Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},

  {SMBfclose, "SMBfclose", 0,
   {"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n",
    "Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},

  {SMBfindnclose, "SMBfindnclose", 0,
   {"Handle=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBfindclose, "SMBfindclose", 0,
   {"Handle=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBsends, "SMBsends", 0,
   {NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL}},

  {SMBsendstrt, "SMBsendstrt", 0,
   {NULL, "Source=[Z]\nDest=[Z]\n", "GroupID=[d]\n", NULL, NULL}},

  {SMBsendend, "SMBsendend", 0,
   {"GroupID=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBsendtxt, "SMBsendtxt", 0,
   {"GroupID=[d]\n", NULL, NULL, NULL, NULL}},

  {SMBsendb, "SMBsendb", 0,
   {NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL}},

  {SMBfwdname, "SMBfwdname", 0, DEFDESCRIPT},
  {SMBcancelf, "SMBcancelf", 0, DEFDESCRIPT},
  {SMBgetmac, "SMBgetmac", 0, DEFDESCRIPT},

  {SMBnegprot, "SMBnegprot", 0,
   {NULL, NULL, NULL, NULL, print_negprot}},

  {SMBsesssetupX, "SMBsesssetupX", FLG_CHAIN,
   {NULL, NULL, NULL, NULL, print_sesssetup}},

  {SMBtconX, "SMBtconX", FLG_CHAIN,
   {"Com2=[w]\nOff2=[d]\nFlags=[w]\nPassLen=[d]\nPasswd&Path&Device=\n", NULL,
    "Com2=[w]\nOff2=[d]\n", "ServiceType=[S]\n", NULL}},

  {SMBtrans2, "SMBtrans2", 0,
   {NULL, NULL, NULL, NULL, print_trans2}},

  {SMBtranss2, "SMBtranss2", 0, DEFDESCRIPT},
  {SMBctemp, "SMBctemp", 0, DEFDESCRIPT},
  {SMBreadBs, "SMBreadBs", 0, DEFDESCRIPT},
  {SMBtrans, "SMBtrans", 0,
   {NULL, NULL, NULL, NULL, print_trans}},

  {-1, NULL, 0, DEFDESCRIPT}};


/*
 * print a SMB message
 */
static void print_smb (uchar *buf, uchar *maxbuf)
{
  struct smbfns *fn;
  int    command;
  uchar *words, *data;
  char *fmt_smbheader = "[P4]SMB Command   =  [B]\n"
                        "Error class   =  [BP1]\n"
                        "Error code    =  [d]\n"
                        "Flags1        =  [B]\n"
                        "Flags2        =  [B][P13]\n"
                        "Tree ID       =  [d]\n"
                        "Proc ID       =  [d]\n"
                        "UID           =  [d]\n"
                        "MID           =  [d]\n"
                        "Word Count    =  [b]\n";

  request = (CVAL (buf, 9) & 0x80) ? 0 : 1;
  command = CVAL (buf, 4);

  fn = smbfind (command, smb_fns);

  PRINTF ("\nSMB PACKET: %s (%s)\n", fn->name, request ? "REQUEST" : "REPLY");

  /* print out the header
   */
  fdata (buf, fmt_smbheader, buf + 33);

  if (CVAL (buf, 5))
  {
    int class = CVAL (buf, 5);
    int num   = SVAL (buf, 7);

    PRINTF ("SMBError = %s\n", smb_errstr(class, num));
  }

  words = buf + 32;
  data  = words + 1 + CVAL (words, 0) * 2;

  while (words && data)
  {
    char *f1, *f2;
    int wct = CVAL (words, 0);

    if (request)
    {
      f1 = fn->descript.req_f1;
      f2 = fn->descript.req_f2;
    }
    else
    {
      f1 = fn->descript.rep_f1;
      f2 = fn->descript.rep_f2;
    }

    if (fn->descript.fn)
    {
      fn->descript.fn (words, data, buf, maxbuf);
    }
    else
    {
      if (f1)
      {
        PUTS ("smbvwv[]=\n");
        fdata (words + 1, f1, words + 1 + wct * 2);
      }
      else if (wct)
      {
        int i,v;

        PUTS ("smbvwv[]=\n");
        for (i = 0; i < wct; i++)
        {
          v = SVAL (words + 1, 2 * i);
          PRINTF ("smb_vwv[%d]=%d (0x%X)\n", i, v, v);
        }
      }

      if (f2)
      {
        PUTS ("smbbuf[]=\n");
        fdata (data + 2, f2, maxbuf);
      }
      else
      {
        int bcc = SVAL (data, 0);

        PRINTF ("smb_bcc=%d\n", bcc);
        if (bcc > 0)
        {
          PUTS ("smb_buf[]=\n");
          print_data (data + 2, MIN (bcc, PTR_DIFF (maxbuf, data + 2)));
        }
      }
    }

    if ((fn->flags & FLG_CHAIN) && CVAL(words,0) && SVAL(words,1) != 0xFF)
    {
      command = SVAL (words, 1);
      words   = buf + SVAL (words, 3);
      data    = words + 1 + CVAL (words, 0) * 2;
      fn      = smbfind (command, smb_fns);

      PRINTF ("\nSMB PACKET: %s (%s) (CHAINED)\n",
              fn->name, request ? "REQUEST" : "REPLY");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -