字典口令攻击实验

运行过程操作:https://www.bilibili.com/video/BV1kM4y1k7vo/?spm_id_from=333.999.list.card_archive.click&vd_source=bbd86c5e7b01149e86a04e5df17904da

实验要求:

系统功能

合法用户可正常登录认证;

指定攻击用户、指定字典后,可实施攻击;

在指定ID情况下,逐一取词尝试,直至破解成功或全部尝试后失败;

返回破解结果;

完整性要求

字典长度超过1K;日志中要体现;

具体实现:

客户端两个主要界面

客户端:

1.client-log界面代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace 实验1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;
        }
        Socket socketClient = null;
        Thread threadClient = null;
        private void Form1_Load(object sender, EventArgs e)
        {
            //定义一个套字节监听  包含3个参数(IP4寻址协议,流式连接,TCP协议)
            socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
            //将获取的ip地址和端口号绑定到网络节点endpoint上
            IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse("9190"));
            //这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bind
            try
            {
                socketClient.Connect(endpoint);
                
                //创建一个线程 用于监听服务端发来的消息
                threadClient = new Thread(RecMsg);
                //将窗体线程设置为与后台同步
                threadClient.IsBackground = true;
                //启动线程
                threadClient.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show("远程服务端断开,连接失败!" + "\r\n");
            }
        }
        private void RecMsg()// 接收服务端发来信息的方法
        {
            String sort = "";
            if (safe.Checked == true)
            { sort = "SLOG"; }
            else if (log.Checked == true)
            { sort = "LLOG"; }
            else if (user.Checked == true)
            { sort = "ULOG"; }
            else if (system.Checked == true)
            { sort = "SYLOG"; }
            while (true) //持续监听服务端发来的消息
            {
                try
                {
                    //定义一个1M的内存缓冲区 用于临时性存储接收到的信息
                    byte[] arrRecMsg = new byte[1024 * 1024];
                    //将客户端套接字接收到的数据存入内存缓冲区, 并获取其长度
                    int length = socketClient.Receive(arrRecMsg);
                    //将套接字获取到的字节数组转换为人可以看懂的字符串
                    string strRecMsg = Encoding.UTF8.GetString(arrRecMsg, 0, length);
                    if (Class1.flag == 0)
                    {
                        if (strRecMsg == "true")
                        {
                            if (safe.Checked == true)
                            { MessageBox.Show("安全管理员登录成功!"); Class1.WriteLogFile("SLOG", this.username.Text.Trim(), "true", ""); }
                            else if (log.Checked == true)
                            {
                                Class1.WriteLogFile("LLOG", this.username.Text.Trim(), "true", "");
                                log form4 = new log();//想要打开的窗体界面
                                this.Hide();//隐藏当前窗体 
                                form4.ShowDialog();
                                Application.ExitThread();
                            }
                            else if (user.Checked == true)
                            {
                                Class1.WriteLogFile("ULOG", this.username.Text.Trim(), "true", "");
                                success form3 = new success();//想要打开的窗体界面
                                this.Hide();//隐藏当前窗体 
                                form3.ShowDialog();
                                Application.ExitThread();
                            }
                            else if (system.Checked == true)
                            { MessageBox.Show("系统管理员登录成功!"); Class1.WriteLogFile("SYLOG", this.username.Text.Trim(), "true", ""); }
                        }
                        else if (strRecMsg == "false")
                        { MessageBox.Show("密码错误!"); Class1.WriteLogFile(sort, this.username.Text.Trim(), "faluse", ""); }
                        else
                        { MessageBox.Show("没有该账号!"); Class1.WriteLogFile(sort, this.username.Text.Trim(), "nofind", ""); }
                    }
                    else
                    {
                        Regex r = new Regex("true"); // 定义一个Regex对象实例
                        Match m = r.Match(strRecMsg); // 在字符串中匹配
                        if (m.Success)
                        {
                            string[] arr = strRecMsg.Split(';');
                            MessageBox.Show("\t获取成功\n用户名:" + username.Text.Trim() + "\n密码:" + arr[1]);
                            Class1.WriteLogFile(sort, this.username.Text.Trim(), "true", Class1.data[Class1.numble]);
                            Class1.flag = 0;
                        }
                        else if (strRecMsg == "faluse")
                        {
                            if (Class1.numble != Class1.Maxnum)
                            {
                                ClientSendMsg(this.username.Text.Trim() + ";" + Class1.data[Class1.numble] + ";" + "ULOG1");
                                Class1.WriteLogFile(sort, this.username.Text.Trim(), "faluse", Class1.data[Class1.numble]);
                                Class1.numble++;
                            }
                            else { MessageBox.Show("您给的txt文本没有找到正确的密码!"); Class1.flag = 0; }

                        }
                        else { MessageBox.Show("没有该账号!请检查类型是否选对!");
                            Class1.WriteLogFile(sort, this.username.Text.Trim(), "nofind", ""); }

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("远程服务器已中断连接!" + "\r\n");

                    break;
                }
            }
        }
        private void ClientSendMsg(string sendMsg)// 发送字符串信息到服务端的方法
        {
            try
            {
                //将输入的内容字符串转换为机器可以识别的字节数组
                byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(sendMsg);
                //调用客户端套接字发送字节数组
                socketClient.Send(arrClientSendMsg);
            }
            catch (Exception ex)
            {
                MessageBox.Show("远程服务器已中断连接,无法发送消息!" + "\r\n");
            }
        }
        private DateTime GetCurrentTime()
        {
            DateTime currentTime = new DateTime();
            currentTime = DateTime.Now;
            return currentTime;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Multiselect = true;
            fileDialog.Title = "请选择文件";
            fileDialog.Filter = "文本文件(.txt)|*.txt"; //设置要选择的文件的类型|后面的是允许出现任意名字但后缀为txt的文本文件
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                String file = fileDialog.FileName;//返回文件的完整路径     
                string line = ""; int i;
                //得到行数据,for循环发送密码给服务端
                using (StreamReader sr = new StreamReader(file))
                {
                    for (i = 0; (line = sr.ReadLine()) != null; i++)
                    {
                        Class1.data[i] = line;   //不能将line直接转化为double 
                    }
                    Class1.Maxnum=i;
                }
                Class1.flag = 1;
                MessageBox.Show("请点击尝试,将会发起字典攻击!");
            }     
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //调用ClientSendMsg方法 将文本框中输入的信息发送给服务端   
         
            if (safe.Checked == true)
            {
                if ((password.Text.Length >= 6) && (password.Text.Length <= 8))
                {
                    Class1.flag = 0;
                    ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "SLOG");
                }
                else if (username.Text.Length == 0 || password.Text.Length == 0)
                { MessageBox.Show("输入有空项,请重新输入"); Class1.WriteLogFile("SLOG", "", "void", "thing"); }
                else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("SLOG", "", "nle", "thing"); }
            }
            else if (log.Checked == true)
            {
                if ( (password.Text.Length >= 6) && (password.Text.Length <= 8))
                {
                    Class1.flag = 0;
                    ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "LLOG");
                }
                else if (username.Text.Length == 0 || password.Text.Length == 0)
                {
                    MessageBox.Show("输入有空项,请重新输入");
                    Class1.WriteLogFile("LLOG", "", "void", "");
                }
                else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("SLOG", "", "nle", "thing"); }
            }
            else if (system.Checked == true)
            {
                if ( (password.Text.Length >= 6) && (password.Text.Length <= 8))
                {
                    Class1.flag = 0;
                    ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "SYLOG");
                }
                else if (username.Text.Length == 0 || password.Text.Length == 0)
                {
                    MessageBox.Show("输入有空项,请重新输入");
                    Class1.WriteLogFile("SYLOG", "", "void", "");
                }
                else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("SYLOG", "", "nle", "thing"); }
            }
            else 
            {
                if ( (password.Text.Length >= 6) && (password.Text.Length <= 8))
                {
                    Class1.flag = 0;
                    ClientSendMsg(this.username.Text.Trim() + ";" + this.password.Text.Trim() + ";" + "ULOG");
                }
                else if (username.Text.Length == 0 || password.Text.Length == 0)
                {
                    MessageBox.Show("输入有空项,请重新输入");
                    Class1.WriteLogFile("ULOG", "", "void", "");
                }
                else { MessageBox.Show("输入长度有误!"); Class1.WriteLogFile("ULOG", "", "nle", "thing"); }
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Form2 form1 = new Form2();//想要打开的窗体界面
            this.Hide();//隐藏当前窗体 
            form1.ShowDialog();
            Application.ExitThread(); 

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (Class1.flag == 1 && username.Text.Trim() != "")
            {
                Class1.numble = 0;
                ClientSendMsg(this.username.Text.Trim() + ";" + Class1.data[Class1.numble] + ";" + "ULOG1");
                Class1.numble++;
            }
            else if (Class1.flag == 1) MessageBox.Show("请在用户名处写上你要攻击人的用户名!");
            else MessageBox.Show("请选择字典攻击的文本!");
        }
    }
}

2.form3日志代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 实验1
{
    public partial class log : Form
    {
        public log()
        {
            InitializeComponent();
            ReadTextFile(@"E:\网络安全\实验1\LogFile.txt");
        }
        private void ReadTextFile(string filePath)
        {
            string[] lines = File.ReadAllLines(filePath);
            foreach (string line in lines)
            {
                logbox.AppendText(line + Environment.NewLine);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 form1 = new Form1();//想要打开的窗体界面
            this.Hide();//隐藏当前窗体 
            form1.ShowDialog();
            Application.ExitThread();
        }

        private void log_Load(object sender, EventArgs e)
        {

        }
    }
}

3.类:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 实验1
{
    class Class1
    {
        public static string i;
        public static int flag =0;
        public static string[] data = new string[500];
        public static int numble = 0;
        public static int Maxnum = 0;
        public static void WriteLogFile(string sort, string name, string result, string thing)
        {
            //改路径
            string logPath = "E:\\网络安全\\实验1";
            string fname = logPath + "\\LogFile.txt";//指定日志文件的目录  
            FileInfo finfo = new FileInfo(fname);//定义文件信息对象
            if (!finfo.Exists)
            {
                FileStream fs; fs = File.Create(fname);
                fs.Close(); finfo = new FileInfo(fname);
            }
            if (finfo.Length > 1024 * 1024 * 10)//文件超过10MB则重命名
                File.Move(logPath + "\\LogFile.txt", logPath + DateTime.Now.TimeOfDay + "\\LogFile.txt");
            using (FileStream fs = finfo.OpenWrite())//创建只写文件流
            {
                StreamWriter w = new StreamWriter(fs); //根据上面创建的文件流创建写数据流  
                w.BaseStream.Seek(0, SeekOrigin.End);//设置写数据流的起始位置为文件流的末尾

                w.Write("\n时间:{0} {1}", DateTime.Now.ToLongTimeString(),
                    DateTime.Now.ToLongDateString());
                //人物+事件(定整体)
                if (sort == "SLOG")
                {
                    w.Write("  主体:安全管理员name:" + name + "  事件:登录");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败\n");
                    else if (result == "nofind") w.Write("  结果:不存在该账号\n");
                    else if (result == "void") w.Write("  结果:失败 输入有空项\n");
                    else if (result == "nle") w.Write("  结果:失败 输入有空项\n");
                }
                else if (sort == "LLOG")
                {
                    w.Write(" 主体:  日志管理员name:" + name + " 事件:登录");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败\n");
                    else if (result == "nofind") w.Write("  结果:不存在该账号\n");
                    else if (result == "void") w.Write("  结果:失败 输入有空项\n");
                    else if (result == "nle") w.Write("  结果:失败 输入有空项\n");
                }
                else if (sort == "SYLOG")
                {
                    w.Write(" 主体:  系统管理员name:" + name + " 事件:登录");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败\n");
                    else if (result == "nofind") w.Write("  结果:不存在该账号\n");
                    else if (result == "void") w.Write("  结果:失败 输入有空项\n");
                    else if (result == "nle") w.Write("  结果:失败 输入有空项\n");
                }
                else if (sort == "ULOG")
                {
                    w.Write("  主体:普通用户name:" + name + "  事件:登录");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败\n");
                    else if (result == "frozen") w.Write("  结果:锁定\n");
                    else if (result == "nofind") w.Write("  结果:失败,未找到该账号\n");
                    else if (result == "void") w.Write("  结果:失败 输入有空项\n");
                    else if (result == "nle") w.Write("  结果:失败 输入有空项\n");
                }
                else if (sort == "SADMS")
                {
                    w.Write("  主体:审计管理员name:" + name + "  事件:注册");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:账号已存在,注册失败\n");
                }
                else if (sort == "LADMS")
                {
                    w.Write("  主体:日志管理员name:" + name + "  事件:注册");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:账号已存在,注册失败\n");
                }
                else if (sort == "SYADMS")
                {
                    w.Write("  主体:系统管理员name:" + name + "  事件:注册");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:账号已存在,注册失败\n");
                }
                else if (sort == "Find")//公告栏
                {
                    w.Write("  主体:普通用户name:" + name + "  事件:查询账号审核状态");
                    //结果
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败\n");
                }
                else if (sort == "FP")//忘记密码
                {
                    w.Write("  主体:普通用户name:" + name + "  事件:忘记密码");
                    //结果
                    if (result == "audit1") w.Write("  结果:提交忘记密码申请成功\n");
                    else w.Write("  结果:提交忘记密码申请失败\n");
                }
                else if (sort == "Cpassword")//修改密码
                {
                    w.Write("  主体:普通用户name:" + name + "  事件:修改密码");
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败\n");
                }

                else if (sort.Length == 11)//注册
                {
                    w.Write("  主体:普通用户name:" + name + "  事件:用户注册" + "");
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败");
                    w.Write("\n\t\t" + thing + "\n");
                }
                else if (sort == "Sa")//审核用户
                {
                    w.Write("  主体:安全管理员name:" + name + "  事件:用户审核" + "");
                    if (result == "true") w.Write("  结果:成功\n");
                    else if (result == "faluse") w.Write("  结果:失败");
                    w.Write("\n\t\t" + thing + "\n");
                }
                else if (sort == "Sd")//删除用户
                {
                    w.Write("  主体:安全管理员name:" + name + "  事件:删除用户");
                    if (result == "true") w.Write("  结果:成功");
                    else if (result == "faluse") w.Write("  结果:失败");
                    w.Write("\n\t\t" + thing + "\n");
                }
                else if (sort == "Sadd")//增加用户
                {
                    w.Write("  主体:安全管理员name:" + name + "  事件:增加用户");
                    if (result == "true") w.Write("  结果:成功");
                    else if (result == "faluse") w.Write("  结果:失败");
                    w.Write("\n\t\t" + thing + "\n");
                }
                else if (sort == "Sc")//修改用户信息
                {
                    w.Write("  主体:安全管理员name:" + name + "  事件:修改用户信息");
                    if (result == "true") w.Write("  结果:成功");
                    else if (result == "faluse") w.Write("  结果:失败");
                    w.Write("\n\t\t" + thing + "\n");
                }

                w.Flush();//清空缓冲区内容,并把缓冲区内容写入基础流
                w.Close();//关闭写数据流
            }

        }
    }
}

服务端:

  1. serve界面代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;

namespace client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;
        }
        Thread threadWatch = null; //负责监听客户端的线程
        Socket socketWatch = null;  //负责监听客户端的套接字  
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)
                socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //服务端发送信息 需要1个IP地址和端口号
                IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
                //将IP地址和端口号绑定到网络节点endpoint上 
                IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse("9190"));
                //监听绑定的网络节点
                socketWatch.Bind(endpoint); //负责监听客户端的套接字  
                //将套接字的监听队列长度限制为20
                socketWatch.Listen(20);
                //创建一个监听线程 
                threadWatch = new Thread(WatchConnecting);//负责监听客户端的线程
                //将窗体线程设置为与后台同步
                threadWatch.IsBackground = true;
                //启动线程
                threadWatch.Start();
                //启动线程后 txtMsg文本框显示相应提示
                txtMsg.AppendText("开始监听客户端传来的信息!" + "\r\n");
            }
            catch (Exception ex)
            {
                txtMsg.AppendText("服务端启动服务失败!" + "\r\n");

            }
        }
        //创建一个负责和客户端通信的套接字 
        Socket socConnection = null;
        private void WatchConnecting()// 监听客户端发来的请求
        {
            while (true)  //持续不断监听客户端发来的请求
            {
                socConnection = socketWatch.Accept();
                txtMsg.AppendText("客户端连接成功! " + "\r\n");
                //创建一个通信线程   使用ParameterizedThreadStart委托向线程函数传送参数
                ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
                Thread thr = new Thread(pts);
                thr.IsBackground = true;
                thr.Start(socConnection);//启动线程
            }
        }
        private void ServerRecMsg(object socketClientPara)// 接收客户端发来的信息并返回(用户名和密码)
        {
            Socket socketServer = socketClientPara as Socket;//as:用于检查在兼容的引用类型之间执行某些类型的转换
            while (true)
            {
                byte[] arrServerRecMsg = new byte[1024 ];//创建个内存缓冲区 其大小为1024*1024字节  即1M  
                try
                {
                    //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
                    int length = socketServer.Receive(arrServerRecMsg);
                    //将机器接受到的字节数组转换为人可以读懂的字符串
                    string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);
                    string[] arr = strSRecMsg.Split(';');
                    txtMsg.AppendText("YAN " + GetCurrentTime() + "\r\t" + arr[0] + "\r\n");
                    txtMsg.AppendText("YAN " + GetCurrentTime() + "\r\t" + arr[1] + "\r\n");
                    txtMsg.AppendText("YAN " + GetCurrentTime() + "\r\t" + arr[2] + "\r\n");
                    //连接数据库//模糊匹配!可能要用到正则
                    String sort = "";
                    Regex r = new Regex("LOG"); // 定义一个Regex对象实例
                    Match m = r.Match(arr[2]); // 在字符串中匹配
                    if (m.Success)
                    {
                        Regex regex = new Regex("ULOG"); // 定义一个Regex对象实例
                        Match z = regex.Match(arr[2]); // 在字符串中匹配
                        if (z.Success) { sort = "u"; }
                        else if (arr[2] == "SLOG") { sort = "s"; }
                        else if (arr[2] == "SYLOG") { sort = "sy"; }
                        else if (arr[2] == "LLOG") { sort = "l"; }
                        String strexist = "select * from et where USERNAME='" + arr[0] + "'and sort='" + sort+"'";
                        String str = "select * from et where USERNAME='" + arr[0] + "'and password='" + arr[1] + "'and sort='" + sort +"'";
                        bool i = Class1.select(strexist); String r_news = "nofind";
                        if (i)
                        {
                            bool t = Class1.select(str);
                            if (t) {
                                if(arr[2]=="ULOG"|| arr[2] == "ULOG1")
                                {
                                    if(arr[2]=="ULOG")
                                    r_news = "true";
                                    else r_news = "true;" + arr[1];
                                }
                                else r_news = "true";
                            } else r_news = "faluse";
                        }
                        ServerSendMsg(r_news);
                    }
                    else
                    {
                        if (arr[2] == "USIGN") { sort = "u"; }
                        else if (arr[2] == "SSIGN") { sort = "s"; }
                        else if (arr[2] == "SYSIGN") { sort = "sy"; }
                        else if (arr[2] == "LSIGN") { sort = "l"; }
                        String strexist = "select * from et where USERNAME='" + arr[0] + "'and sort=" + sort;
                        String str = " insert into et(USERNAME,password,sort) values('" + arr[0] + "','"+arr[1]+"','"+sort+"')";
                        bool i = Class1.select(strexist); String r_news = "exist";
                        if (!i)
                        {
                            int t = Class1.add(str);
                            if (t>0) { r_news = "true"; } else r_news = "faluse";
                        }
                        ServerSendMsg(r_news);
                    }
                        
                }
                catch (Exception ex)
                {
                    txtMsg.AppendText("客户端已断开连接!" + "\r\n");
                    break;
                }
            }
        }
        private void ServerSendMsg(string returnnews)// 发送信息到客户端的方法
        {
            try
            {
                //将输入的字符串转换成 机器可以识别的字节数组
                byte[] arrSendMsg = Encoding.UTF8.GetBytes(returnnews);
                //加附加语句
                //向客户端发送字节数组信息
                socConnection.Send(arrSendMsg);
                //将发送的字符串信息附加到文本框txtMsg上(serve)
                txtMsg.AppendText("服务器 " + GetCurrentTime() + "\r\t" + returnnews + "\r\n");
            }
            catch (Exception ex)
            {
                txtMsg.AppendText("客户端已断开连接,无法发送信息!" + "\r\n");
            }
        }
        public IPAddress GetLocalIPv4Address()// 获取本地IPv4地址
        {
            IPAddress localIpv4 = null;
            //获取本机所有的IP地址列表
            IPAddress[] IpList = Dns.GetHostAddresses(Dns.GetHostName());
            //循环遍历所有IP地址
            foreach (IPAddress IP in IpList)
            {
                //判断是否是IPv4地址
                if (IP.AddressFamily == AddressFamily.InterNetwork)
                    localIpv4 = IP;
                else continue;

            }
            return localIpv4;
        }
        private DateTime GetCurrentTime()// 获取当前系统时间的方法
        {
            DateTime currentTime = new DateTime();
            currentTime = DateTime.Now;
            return currentTime;
        }

        private void txtMsg_TextChanged(object sender, EventArgs e)
        {

        }
    }
    
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace client
{
    class Class1
    {

        public static bool select(string str)
        {
            bool a = true;
            SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=KLRZ;Integrated Security=True");//用户密码登录
            conn.Open();
            SqlCommand cmd = new SqlCommand(str, conn);
            SqlDataReader sqlDataReader = cmd.ExecuteReader();
            a = sqlDataReader.Read();
            conn.Close();
            return a;
        }
        public static int selectc(string str, bool a)
        {
            SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=KLRZ;Integrated Security=True");//用户密码登录
            conn.Open();
            SqlCommand cmd = new SqlCommand(str, conn);
            SqlDataReader sqlDataReader = cmd.ExecuteReader();
            a = sqlDataReader.Read();
            int different = Convert.ToInt32(sqlDataReader[0]);
            conn.Close();
            return different;
        }
        public static int add(string str)
        {
            int a = 3;
            SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=KLRZ;Integrated Security=True");//用户密码登录
            conn.Open();
            SqlCommand cmd = new SqlCommand(str, conn);
            //SqlDataReader sqlDataReader = cmd.ExecuteReader();
            a = cmd.ExecuteNonQuery();
            conn.Close();
            return a;
        }
    }
}

数据库结构:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值