建档操作如ping,查询本机主机ip,同步异步查询局域网内主机,同步异步邮件发送等

1)ping

通过ping类测试网络

using System;
using System.Text;
using System.Net.NetworkInformation; namespace PingExec
{
class Program
{
static void Main(string[] args)
{
Ping ping = new Ping();
PingOptions opt = new PingOptions();
opt.DontFragment = true; string data = "aaaaaaaaaaaaaaa";
byte[] buffer = Encoding.Default.GetBytes(data);
int timeout = ;
PingReply replay = ping.Send("192.168.1.101", timeout, buffer, opt);
string result = ""; if(replay.Status==IPStatus.Success)
{
result = "Address:{0}\r\nRoundTrip time:{1}\r\nTime to live:{2}\r\nDont fragment:{3}\r\n" +
"Buffer size:{4}";
string str = string.Format(result, replay.Address.ToString(), replay.RoundtripTime, replay.Options.Ttl,
replay.Options.DontFragment, replay.Buffer.Length);
Console.WriteLine(str);
}
Console.ReadKey();
}
}
}

2)查询本机ip与主机名

using System;
using System.Net;
using System.Diagnostics;
using System.Net.Sockets;

(一)通过Process类调用ipconfig.exe

        public static string GetIp()
{
Process cmd = new Process();
cmd.StartInfo.FileName = "ipconfig.exe";//设置程序名
cmd.StartInfo.Arguments = "/all"; //参数 cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;//不显示窗口(控制台程序是黑屏) cmd.Start();
string info = cmd.StandardOutput.ReadToEnd();
cmd.WaitForExit();
cmd.Close();
return info;
}

(二)通过DNS类获取

       static string GetLocalIp()
{
try
{
string HostName = Dns.GetHostName(); //得到主机名
IPHostEntry IpEntry = Dns.GetHostEntry(HostName);
for (int i = ; i < IpEntry.AddressList.Length; i++)
{
//从IP地址列表中筛选出IPv4类型的IP地址
//AddressFamily.InterNetwork表示此IP为IPv4,
//AddressFamily.InterNetworkV6表示此地址为IPv6类型
if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork)
{
return IpEntry.AddressList[i].ToString();
}
}
return "";
}
catch (Exception ex)
{
// MessageBox.Show("获取本机IP出错:" + ex.Message);
return "";
}
}
IpEntry.AddressList中包含所有ip,包括ip6,ip4(包括无线Ip4)

3)搜索局域网内可ping通的主机

搜索网段范围内所有Ip并测试。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;

(一)非异步操作

       public static void SearchIP()
{
List<string> ipList = new List<string>();
//获取本地机器名
string myHostName = Dns.GetHostName();
//获取本机IP
string myHostIP = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString();
Console.WriteLine(myHostIP);
//截取IP网段
string ipDuan = myHostIP.Remove(myHostIP.LastIndexOf('.'));
//MessageBox.Show(ipDuan);
//枚举网段计算机
Ping myPing = new Ping();
string pingData = "aaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(pingData);
for (int i = ; i <= ; i++)
{
string pingIP = ipDuan + "." + i.ToString();
PingReply pingReply = myPing.Send(pingIP, , buffer);
if (pingReply.Status == IPStatus.Success)
{
ipList.Add(pingIP);
//Console.Write("答复的主机地址:" + pingReply.Address.ToString() + " ");
//Console.Write("往返时间:" + pingReply.RoundtripTime.ToString() + " ");
//Console.Write("生存时间:" + pingReply.Options.Ttl.ToString() + " ");
//Console.Write("是否控制数据包的分段:" + pingReply.Options.DontFragment.ToString() + " ");
//Console.Write("缓冲区大小:" + pingReply.Buffer.Length.ToString() + " ");
Console.WriteLine(pingIP);
}
Console.WriteLine("------------------" + i.ToString());
}
}

(二)异步操作

       public static void SearchIPAnsyc()
{
try
{
for (int i = ; i <= ; i++)
{
Ping myPing = new Ping();
myPing.PingCompleted += new PingCompletedEventHandler(PingCompletedAction); string pingIP = "192.168.1." + i.ToString();
myPing.SendAsync(pingIP, , null);
Console.WriteLine("------------------" + i.ToString());
}
}
catch
{ }
} private static void PingCompletedAction(object sender, PingCompletedEventArgs e)
{
List<string> ipList = new List<string>();
if (e.Reply.Status == IPStatus.Success)
{
ipList.Add(e.Reply.Address.ToString());
Console.Write(e.Reply.Address.ToString());
Console.WriteLine("Ansyc-----------------------");
}
// Console.WriteLine("Ansyc-----------------------");
}

4)通过 SmtpClient类发送电子邮件

using System;
using System.ComponentModel;
using System.Net.Mail;
using System.Text;

首相通过MailMessage添加邮件发送信息,包括主题,内容,附件等。其中附件通过Attachment类添加。

MailMessage类主题

           string sendMail= "********@163.com";
string sendPwd = "*********"; MailAddress mailAddress = new MailAddress(sendMail);
MailMessage mailMessage = new MailMessage(); mailMessage.To.Add("*******@qq.com");//添加发送地址,可添加多个
//mailMessage.CC.Add("00000@dd.com");//添加抄送地址
mailMessage.From = mailAddress;
mailMessage.Subject = "test";//主题
mailMessage.SubjectEncoding = Encoding.UTF8;
mailMessage.Body = "测试邮件";//正文
mailMessage.BodyEncoding = Encoding.Default;//正文的编码
mailMessage.Priority = MailPriority.High;
mailMessage.IsBodyHtml = true; //添加附件
string[] attachments = new string[] { @"E:\C#\PingExec\NetHostSearch\bin\Debug\00.jpg" };
try
{
if(attachments.Length>)
{
foreach(string attach in attachments)
{
Attachment attachment = new Attachment(attach);
mailMessage.Attachments.Add(attachment);
Console.WriteLine("Attach success");
}
}
}
catch(Exception ex)
{
Console.WriteLine("Attach failed"+ex.Message);
}

定义发送协议

            //定义发送协议
SmtpClient smtpClient = new SmtpClient();
smtpClient.Credentials= new System.Net.NetworkCredential(sendMail, sendPwd);
smtpClient.Host= "smtp.163.com";
smtpClient.Host对于不同的网址邮箱服务器不一样,比如扣扣邮箱则为"smtp.qq.com"

(一)同步发送

            try
{
smtpClient.Send(mailMessage);
Console.WriteLine("Success");
}
catch (SmtpException ex)
{
Console.WriteLine("Failed:" + ex.Message);
}
mailMessage.Dispose();

(二)异步发送

            //异步发送  也可以用SendMailAsync 其返回值为task,既可以调用task的continWith方法
smtpClient.SendCompleted += SendCompletedAction;
smtpClient.SendAsync(mailMessage,null);
Console.ReadKey();

异步发送 结束后调用SendCompletedAction,其定义如下

        private static void SendCompletedAction(object sender, AsyncCompletedEventArgs e)
{
String token = (string)e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
}
else
{
Console.WriteLine("Message sent.");
}
}

发送邮件为了便于理解在此进行了分步分割,一下为完整代码,其中同步发送方法已注释:

using System;
using System.ComponentModel;
using System.Net.Mail;
using System.Text; namespace MailSendMgr
{
class Program
{
static void Main(string[] args)
{
string sendMail= "***********@163.com";
string sendPwd = "*************"; MailAddress mailAddress = new MailAddress(sendMail);
MailMessage mailMessage = new MailMessage(); mailMessage.To.Add("************@qq.com");//添加发送地址,可添加多个
//mailMessage.CC.Add("00000@dd.com");//添加抄送地址
mailMessage.From = mailAddress;
mailMessage.Subject = "test";//主题
mailMessage.SubjectEncoding = Encoding.UTF8;
mailMessage.Body = "测试邮件";//正文
mailMessage.BodyEncoding = Encoding.Default;//正文的编码
mailMessage.Priority = MailPriority.High;
mailMessage.IsBodyHtml = true; //添加附件
string[] attachments = new string[] { @"E:\C#\PingExec\NetHostSearch\bin\Debug\00.jpg" };
try
{
if(attachments.Length>)
{
foreach(string attach in attachments)
{
Attachment attachment = new Attachment(attach);
mailMessage.Attachments.Add(attachment);
Console.WriteLine("Attach success");
}
}
}
catch(Exception ex)
{
Console.WriteLine("Attach failed"+ex.Message);
} //定义发送协议
SmtpClient smtpClient = new SmtpClient();
smtpClient.Credentials= new System.Net.NetworkCredential(sendMail, sendPwd);
smtpClient.Host= "smtp.163.com"; //发送
//try
//{
// smtpClient.Send(mailMessage);
// Console.WriteLine("Success");
//}
//catch (SmtpException ex)
//{
// Console.WriteLine("Failed:" + ex.Message);
//}
//mailMessage.Dispose(); //异步发送 也可以用SendMailAsync 其返回值为task,既可以调用task的continWith方法
smtpClient.SendCompleted += SendCompletedAction;
smtpClient.SendAsync(mailMessage,null);
Console.ReadKey();
} private static void SendCompletedAction(object sender, AsyncCompletedEventArgs e)
{
String token = (string)e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
}
else
{
Console.WriteLine("Message sent.");
}
}
}
}

5)扫描端口

using System;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading; namespace ScanPort
{
class Program
{
private static int port;
private static string IP;
static void Main(string[] args)
{
string targetIP = args[];
int startPort =;
int endPort = ;
Thread work; int result = Check(targetIP, startPort, endPort);
IP = targetIP;
switch(result)
{
case :
Console.WriteLine("开始扫描:");
for(int i=startPort;i<endPort;i++)
{
port = i;
work = new Thread(new ThreadStart(Scan));
work.Start();
}
Console.WriteLine("扫描结束:");
break;
case :
Console.WriteLine("端口错误!");
break;
case :
Console.WriteLine("目标主机不可达!");
break;
case :
Console.WriteLine("目标主机不可达,端口错误!");
break;
}
Console.ReadKey();
} private static int PingTargetIP(string ip)
{
Ping ping = new Ping();
PingOptions opt = new PingOptions();
opt.DontFragment = true; string data = "aaaaaaaaaaaaaaa";
byte[] buffer = Encoding.Default.GetBytes(data);
int timeout = ;
PingReply replay = ping.Send(ip, timeout, buffer, opt); if (replay.Status == IPStatus.Success)
{
return ;
}
else
{
return ;
}
} private static int Check(string ip,int startPort,int endPort)
{
int pingResult, result; if(PingTargetIP(ip)>)
{
pingResult = ;
}
else
{
pingResult = ;
} if(startPort<||endPort>||startPort>endPort)
{
result = pingResult + ;
}
else
{
result = pingResult ;
}
return result;
} private static void Scan()
{
int currentPort = port;
try
{
TcpClient tcpClient = new TcpClient(IP, currentPort);
Console.WriteLine(" 开放端口:" + currentPort);
}
catch
{ }
}
}
}

C#基本网络操作的更多相关文章

  1. android内部培训视频_第四节(1)_异步网络操作

    第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...

  2. Android网络操作的几种方法

    安卓开发软件:AndroidStudio 服务器软件:Myeclipse+Tomcat 首先无论是哪种方式,安卓手机软件要想联网,必须要申请联网权限(android.permission.INTERN ...

  3. 在 shell 脚本获取 ip、数字转换等网络操作

    在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...

  4. 九、Android学习第八天——广播机制与WIFI网络操作(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...

  5. (原创)在service中定时执行网络操作的几点说明

    执行网络操作是耗时操作,即便是在service中也要放到子线程中执行 这里我用到了async-http-client框架来执行异步请求操作 计时用的java原生Timer和TimerTask类 本来这 ...

  6. android之网络操作(1)

    一.网络操作 在网络操作中JAVA已经为我提供了一套API用来进行网络操作,在android开发中我们仍可以这套API来做开发.下面通过一个简单的例子来了解一下android下的网络操作. 点击图中下 ...

  7. PHP网络操作函数汇总

    PHP网络操作函数汇总 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了PHP网络操作函数汇总,本文列举了如gethostbyaddr.gethostbyname.head ...

  8. 自定义强大的C#网络操作基础类(NetHelper)

    using System; using System.Text;using System.Net.Sockets;using System.Net.Mail;using System.Net; nam ...

  9. NodeJS学习之网络操作

    NodeJS -- 网络操作 使用NodeJS内置的http模块简单实现HTTP服务器 var http = require('http'); http.createServer(function(r ...

  10. Base-Android快速开发框架(五)--网络操作之RequestModel、ResponeModel、CustomAsyncHttpClient

    在正式介绍CustomAsyncHttpClient之前,刚好最近有一个朋友找我帮忙给他们看下一个APP.我先上一段代码截图.一段检测版本更新的接口代码.

随机推荐

  1. 【Django】url(路由系统)

    1.单一路由对应 url(r'^index/',views.index), 2.基于正则的路由 url(r'^index/(\d*)', views.index), url(r'^manage/(?P ...

  2. frp 端口映射

    简介 frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透. 场景 利用处于内网或防火墙后 ...

  3. 利用sqlalchemy 查询视图

    这个问题 google 百度 中英文搜了一上午.最新的回答还是 7年前.最后自己靠着官方文档的自己改出来一个比较方便的方法 使用环境 python == 3.7.0 SQLAlchemy === 1. ...

  4. linux中将video转换成gif

    我使用的机器是Linux mint 17,因为习惯了在linux中开发而有时候在写小demo的时候要带一些演示,虽然可以使用录屏也可以但是视屏演示这些小demo也不是特别的方便.之前一直在linux中 ...

  5. 利用echarts展示旅行足迹

    前言 一直有个环游世界的梦,周游列国,体验不同国家的人类文明,寻山访水,体验造物主大自然的伟大造化.毕竟人生不止眼前的苟且,还有诗和远方.这么多年以来,陆续走过了一些地方,每到一个地方,都让我离梦想又 ...

  6. python爬虫添加请求头和请求主体

    添加头部信息有两种方法 1.通过添加urllib.request.Request中的headers参数 #先把要用到的信息放到一个字典中 headers = {} headers['User-Agen ...

  7. 编程小技巧之 Linux 文本处理命令

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...

  8. centos7 安装 docker

    一.概念 1.Docker引擎 (docker engine) 也称docker daemon,也称为docker服务,只要启动服务,就可以通过docker client发送相关docker命名,与d ...

  9. spring源码分析系列4:ApplicationContext研究

    ApplicationContext接口 首先看一下一个最基本的上下文应该是什么样子 ApplicationContext接口的注释里写的很清楚: 一个基本applicationContext应该提供 ...

  10. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】

    首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/echartsMap/,并提供实时geoJson数据文件下载 echarts官方社区链接地址(可在线编辑):https:/ ...