using System.Collections.Generic
using System.ComponentModel
using System.Data
using System.Drawing
using System.Linq
using System.Text
using System.Threading.Tasks
using System.Windows.Forms
using System.Data.SqlClient
using System.Net
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent()
}
//获取本机IP,然后存储在strAddr中
public string getLocalIP()
{
string strHostName = Dns.GetHostName()//得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName)//取得本机IP
string strAddr = ipEntry.AddressList[0].ToString()
return (strAddr)
}
private void button1_Click(object sender, EventArgs e)
{
string username
string password
string LocalIP
string DBIP1 = ""
LocalIP = getLocalIP()
string dataDir = AppDomain.CurrentDomain.BaseDirectory
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir)
}
//定义用户名和密码变量
username = textBox1.Text
password = textBox2.Text
//使用创建数据库连接
using (SqlConnection conn = new SqlConnection(@"Data Source=数据库Initial Catalog=xxxUser ID=数据库用户名Password=密码"))
{
conn.Open()//打开数据库
//获取数据库中当前登录名的IP字段,存储与DBIP1中
using (SqlCommand getDBIP = conn.CreateCommand())
{
getDBIP.CommandText = "select * from LoginDetail where UID='" + username + "'"
using (SqlDataReader DBIP = getDBIP.ExecuteReader())
if (DBIP.Read())
{
DBIP1 = DBIP.GetString(DBIP.GetOrdinal("IPaddr"))
}
}
using (SqlCommand cmd = conn.CreateCommand())
{
//查询命令为:查询UserName等于输入的用户名
cmd.CommandText = "select * from LoginDetail where UID='" + username + "'"
//将查询到的数据保存在reader这个变量里
using (SqlDataReader reader = cmd.ExecuteReader())
{
//如果reader.Read()的结果不为空, 则说明输入的用户名存在
if (reader.Read())
{
/*从数据库里查询出和用户相对应的PassWorld的值
*reader.GetOrdinal("PassWord")的作用是得到PassWord的为这行数据中的第几列,返回回值是int
*reader.GetString()的作用是得到第几列的值,返回类型为String.
*/
string dbpassword = reader.GetString(reader.GetOrdinal("PWD"))
//比较用户输入的密码与从数据库中查询到的密码是否一至,如果一至,就登录成功
if (password == dbpassword)
{
if (DBIP1 == "")//如果数据库中当前登录的ID有记录IP地址,则拒绝登录
{
Form1 form1 = new Form1()
C#实现网段扫描--------------------------------------------------------------------------------
目录
1.使用的类
2.获取本地主机IP地址
3.远程查询
4.实现网段的扫描
--------------------------------------------------------------------------------
正文
1.先介绍一下使用的类:
DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息。
IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。
IPAddress 类:IP 网络上的地址。
使用的命名空间有:
System.Net 命名空间为当前网络上使用的多种协议提供了简单的编程接口.
System.IO命名空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。
System.Thread 命名空间主要是用来多线程序编程。
程序实现以下几个功能:
2.获取本地主机IP地址
//对Button控件的事件的响应
private void buttion1_click(object sender,System.Event.Args e)
[
IPHostEntry myHost = new IPHostEntry()
Try
[
// Dns.GetHostName()获取本地计算机的主机名
// Dns.GetHostByName()获取指定 DNS 主机名的 DNS 信息
//得到本地主机的DNS信息
myHost = Dns.GetHostByName(Dns.GetHostName())
//显示本地主机名
textBox1.Text = myHost.HostName.ToString()
//显示本地主机的IP地址表
for(int i=0i<myHost.AddressList.lengthi++)
[
richTextBox1.AppendText(“本地主机IP地址->”+myHost.AddressList[i].ToString()+”\r”)
]
catch(Exception error)
[
MessageBox.Show(error.Message)
]
]//private
3.远程查询
private void buttion2_click(object Sender,System.EventArgs e)
[
IPHostEntry myDnsToIP = new IPHostEntry()
//Dns.Resolve 方法: 将 DNS 主机名或以点分隔的四部分表示法格式的 // IP 地址解析为 IPHostEntry实例
myDnsToIP =Dns.Resolve(textBox2.Text.ToString())
//显示此域名的IP地址的列表
for(int i=0i<myDnsToIPAddressList.Lengthi++)
[
rich.TextBox1.AppendText(textBox2.Text+”的IP地址是”+myDnsToIP.AddressList[i].ToString()+”\r”)
]
]
4.实现网段的扫描
实现网段的扫描,确定网络中正在使用的主机数目。这里使用了多线程技术,增加了一个线程,为了防止程序扫描的时间过长,影响程序的响应。不过在.net中由于使用了垃圾收集技术所以对线程的控制也不是很复杂的。
private void button3_click(object sender, System.EventArgs e)
[
//Thread 类: 创建并控制线程
Thread thScan = new thread(new ThreadStrart(ScanTarget))
//Thread.Start 方法:启动线程
thScan.Strart()
]
private void ScanTarget()
[
//构造IP地址的31-8BIT 位,也就是固定的IP地址的前段
// numericUpDown1是定义的System.Windows.forms.NumericUpDown控件
string strIPAddress=numericUpDown1.Text+”.”+numericUpDown2.Text+”.”+numericUpDown3.Text+”.”
//开始扫描地址
int nStrat = Int32.Parse(numericUpDown4.Text)
//终止扫描地址
int nEnd =Int32.Parse(numericUpDown5.Text)
//扫描的 *** 作
for(int i=nStrati<=nEndi++)
[
string strScanIPAdd = strIPAddress +i.ToString()
//转换成IP地址
IPAddress myScanIP = IPAddress.Parse(strScanIPAdd)
try
[
//你可以加入自已的,增强功能
// Dns.GetHostByAddress 方法: 根据 IP 地
//址获取 DNS 主机信息。
IPHostEntry myScanHost =
Dns.GetHostByAddress(myScanIP)
//获取主机的名
string strHostName =myScanHost.HostName.ToString()
richTextBox1.AppendText(strScanIPAdd+”->”+strHostName+”\r”)
]
catch(Exception error)
[
MessageBox.Show(error.Message)
]
]//for
]//private
到此为止一个简单用C#实现扫描器的主要功能就完成了:).
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)