Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中通过CIFS中的套接字发送第一个初始请求?_C# - Fatal编程技术网

如何在C#中通过CIFS中的套接字发送第一个初始请求?

如何在C#中通过CIFS中的套接字发送第一个初始请求?,c#,C#,嗨 如何在C#中通过CIFS中的套接字发送第一个初始请求? 我想发送第一个初始请求,并从C#中的目标地址获得响应。 我想以CIFS格式发送CIFS请求 非常感谢您提供的任何代码片段 提前谢谢。@傻瓜:是的,我试过这样: 内部枚举命令类型:字节 { SMB\u COM\u创建\u目录=0x00, SMB\u COM\u DELETE\u目录=0x01, SMB_COM_OPEN=0x02, SMB_COM_CREATE=0x03, SMB_COM_CLOSE=0x04, SMB_COM_FLUSH

如何在C#中通过CIFS中的套接字发送第一个初始请求? 我想发送第一个初始请求,并从C#中的目标地址获得响应。 我想以CIFS格式发送CIFS请求

非常感谢您提供的任何代码片段


提前谢谢。

@傻瓜:是的,我试过这样:

内部枚举命令类型:字节 { SMB\u COM\u创建\u目录=0x00, SMB\u COM\u DELETE\u目录=0x01, SMB_COM_OPEN=0x02, SMB_COM_CREATE=0x03, SMB_COM_CLOSE=0x04, SMB_COM_FLUSH=0x05, SMB_COM_DELETE=0x06, SMB_COM_RENAME=0x07, SMB\u COM\u查询\u信息=0x08, SMB\u COM\u集合\u信息=0x09, SMB_COM_READ=0x0A, SMB_COM_WRITE=0x0B, SMB\u COM\u锁定\u字节\u范围=0x0C, SMB\u COM\u解锁\u字节\u范围=0x0D, SMB\u COM\u CREATE\u TEMPORARY=0x0E, SMB\u COM\u CREATE\u NEW=0x0F, SMB\u COM\u CHECK\u目录=0x10, SMB\u COM\u进程\u退出=0x11, SMB_COM_SEEK=0x12, SMB_COM_LOCK_和_READ=0x13, SMB_COM_写入_和_解锁=0x14, SMB\u COM\u READ\u RAW=0x1A, SMB\u COM\u读取\u MPXv0x1B, SMB\U COM\U READ\U MPX\U次要=0x1C, SMB\u COM\u WRITE\u RAW=0x1D, SMB\u COM\u写入\u MPX=0x1E, SMB\u COM\u写入\u MPX\u辅助=0x1F, SMB_COM_WRITE_COMPLETE=0x20, SMB\u COM\u查询\u服务器=0x21, SMB\u COM\u集合\u信息2=0x22, SMB\u COM\u查询\u信息2=0x23, SMB\u COM\u锁定\u和x=0x24, SMB\u COM\u事务=0x25, SMB\u COM\u事务\u次要=0x26, SMB\u COM\u IOCTL=0x27, SMB_COM_IOCTL_SECONDARY=0x28, SMB_COM_COPY=0x29, SMB_COM_MOVE=0x2A, SMB_COM_ECHO=0x2B, SMB_COM_WRITE_和_CLOSE=0x2C, SMB\u COM\u OPEN\u和X=0x2D, SMB_COM_READ_和x=0x2E, SMB\u COM\u WRITE\u和x=0x2F, SMB\u COM\u新建\u文件大小=0x30, SMB_COM_CLOSE_和_TREE_DISC=0x31, SMB_COM_事务2=0x32, SMB_COM_事务2_次要=0x33, SMB_COM_FIND_CLOSE2=0x34, SMB\u COM\u FIND\u NOTIFY\u CLOSE=0x35, /*由Xenix/Unix 0x60使用� 0x6E*/ SMB\u COM\u树\u连接=0x70, SMB\u COM\u树\u断开连接=0x71, SMB\u COM\u协商=0x72, SMB\u COM\u会话\u设置\u和x=0x73, SMB\u COM\u注销\u和x=0x74, SMB\u COM\u树\u连接\u和X=0x75, SMB\u COM\u查询\u信息\u磁盘=0x80, SMB_COM_SEARCH=0x81, SMB_COM_FIND=0x82, SMB_COM_FIND_UNIQUE=0x83, SMB\u COM\u FIND\u CLOSE=0x84, SMB\u COM\u NT\u TRANSACT=0xA0, SMB\u COM\u NT\u TRANSACT\u SECONDARY=0xA1, SMB\u COM\u NT\u CREATE\u和X=0xA2, SMB\u COM\u NT\u CANCEL=0xA4, SMB_COM_NT_RENAME=0xA5, SMB\u COM\u OPEN\u PRINT\u FILE=0xC0, SMB\u COM\u写入\u打印\u文件=0xC1, SMB\u COM\u CLOSE\u PRINT\u FILE=0xC2, SMB\u COM\u GET\u PRINT\u QUEUE=0xC3, SMB\u COM\u读取\u批量=0xD8, SMB\u COM\u写入\u批量=0xD9, SMB\u COM\u写入\u批量\u数据=0xDA }

    public struct CIFSPacket
    {
        public uint protocolIdentifier;//the value must be "0xFF+'SMB'"
        public byte command;

        public byte errorClass;
        public byte reserved;
        public ushort error;

        public byte flags;


        //here there are 14 bytes of data which is used differently among different dialects.
        //I do want the flags2 however so I'll try parsing them
        public ushort flags2;

        public ushort treeId;
        public ushort processId;
        public ushort userId;
        public ushort multiplexId;
        //trans request
        public byte wordCount;//Count of parameter words defining the data portion of the packet.
        //from here it might be undefined...

        public int parametersStartIndex;

        public ushort byteCount;//buffer length
        public int bufferStartIndex;

       // [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] 
        public string Buffer;


    }



     static void Main(string[] args)
    {

          sock = new Socket(AddressFamily.InterNetwork,  
         SocketType.Stream, ProtocolType.Tcp); 
               // create server IPEndPoint instance. We assume  
               //GetHostEntry returns at least one address 
          IPAddress server = IPAddress.Parse("172.24.18.240");
          int servPort = 139;

             IPEndPoint serverEndPoint = new IPEndPoint(Dns.GetHostEntry(server).AddressList[0], servPort);

              // CONNECT THE SOCKET TO THE SERVER ON SPECIFIED PORT

               sock.Connect(serverEndPoint); 

              /// SocketOptionLevel Tcp = new SocketOptionLevel();   
               sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);





               CIFSPacket packet = new CIFSPacket();
               packet.protocolIdentifier = 0xff;
               packet.command = (byte)CommandTypes.SMB_COM_NEGOTIATE;
               packet.errorClass = 0xff;
               packet.error = 0;
               packet.flags = 0x00;
               packet.flags2 = 0x0001;
               packet.multiplexId = 22;
               packet.wordCount = 100;
               packet.Buffer = "NT LM 0.12";
               packet.byteCount = (ushort)packet.Buffer.Length;



               //System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
               // Byte[] bytes = encoding.GetBytes(packet.ToString());

               int len = Marshal.SizeOf(packet);
               byte[] arr = new byte[len];
               IntPtr ptr = Marshal.AllocHGlobal(len);
               Marshal.StructureToPtr(packet, ptr, true);
               Marshal.Copy(ptr, arr, 0, len);
               Marshal.FreeHGlobal(ptr);

               //Byte[] bite = null;
               //bite = BitConverter.GetBytes(Convert.ToDouble(packet));


               sock.Send(arr);



               Thread thread = new Thread(new ThreadStart(WorkThreadFunction));
               thread.Start();
              // Console.WriteLine ("Connected to server... SENDING ECHO STRING");
               //Console.ReadLine();   



    }
    public static void WorkThreadFunction()
    {

        byte[] buffer = new byte[1024];
        try
        {
            int iRx = sock.Receive(buffer);
        }

        catch (Exception ex)
        {
        }

    }
但插座不响应??? 我认为CIFS数据包的形成是错误的。
有什么建议或代码片段吗?

如果你说出你已经尝试过的内容/你已经走了多远,这会有所帮助。