实例介绍
【实例简介】如果提示找不到 wpcap.dll,请到这里下载win10pcap.msi,并安装,则可以解决这个问题。网址:http://www.win10pcap.org/download/
【实例截图】
【核心代码】
using PacketDotNet; using SharpPcap; using SharpPcap.LibPcap; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using 实验二_端口扫描技术; namespace 端口扫描小工具 { public partial class Form1 : Form { IPAddress sourceip = NetworkUtils.GetPhysicalIP(); LibPcapLiveDeviceList devices = null; PcapDevice device; string way = "Syn Scan"; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { BeginIp.Text = NetworkUtils.GetPhysicalIP().ToString(); EndIp.Text = NetworkUtils.GetPhysicalIP().ToString(); } private void OneIP_CheckedChanged(object sender, EventArgs e) { this.EndIp.Text = this.BeginIp.Text; } private void TcpBegin_Click(object sender, EventArgs e) { if (Connect.Checked == true) { way = "Connect Scan"; Connectscan(); } else { devices = LibPcapLiveDeviceList.Instance; foreach (PcapDevice dev in devices) { if (dev.Interface.FriendlyName.ToString() == "WLAN") { device = dev; device.OnPacketArrival = new PacketArrivalEventHandler(device_OnPackArrival); device.Open(DeviceMode.Promiscuous, 1000); device.StartCapture(); } } long beginip = StringIPToUintIP(this.BeginIp.Text); long endip = StringIPToUintIP(this.EndIp.Text); ushort beginport = Convert.ToUInt16(this.BeginPort.Text); ushort endport = Convert.ToUInt16(this.EndPort.Text); progressBar1.Maximum = ((endport - beginport) 1);//设置最大长度值 progressBar1.Value = 0;//设置当前值 PhysicalAddress sourceMAC = NetworkUtils.GetMacAddress(sourceip);//源MAC ParameterizedThreadStart threadStart = t => { for (long i = beginip; i <= endip; i ) { IPAddress destionip = NetworkUtils.LongToIPAddress(i); PhysicalAddress destionMAC = NetworkUtils.GetMacAddress(destionip);//目的MAC for (int m = beginport; m <= endport; m ) { UpdateProgressBar(m.ToString()); ushort port = Convert.ToUInt16(m); ushort ssport = Convert.ToUInt16(6060); TcpPacket packet = NetworkUtils.CreateTcpPacket(ssport, port, true, false);//第一步构造TCP数据包 IPv4Packet ipv4packet = NetworkUtils.CreateIpV4Packet(sourceip, destionip, packet);//第二布构造含有TCP的IP包 EthernetPacket enterpacket = NetworkUtils.CreateEthernetPacket(sourceMAC, destionMAC, ipv4packet);//第三步构造以太网数据包 device.SendPacket(enterpacket);//发送数据包 } } }; Thread thread = new Thread(threadStart); thread.IsBackground = true; thread.Start(); } }//TCP扫描 delegate void UpdateProgressBarCallback(object port); private void UpdateProgressBar(object port) { if (progressBar1.InvokeRequired) { UpdateProgressBarCallback d = new UpdateProgressBarCallback(UpdateProgressBar); this.Invoke(d, new object[]{port}); return; } this.textBox7.Text = "当前扫描端口" port.ToString(); progressBar1.Value = 1;//让进度条增加一次 float percent = ((float)progressBar1.Value/progressBar1.Maximum)*100; label5.Text = percent.ToString() "%"; } /// <summary> /// IP地址转化 /// </summary> /// <param name="ipaddr">字符串的IP地址</param> /// <returns>整型的IP地址</returns> private long StringIPToUintIP(string ipaddr) { string[] ips = ipaddr.Split('.'); return Convert.ToInt64(ips[3]) * 256 * 256 * 256 Convert.ToInt64(ips[2]) * 256 * 256 Convert.ToInt64(ips[1]) * 256 Convert.ToUInt32(ips[0]); } private void device_OnPackArrival(object sender, CaptureEventArgs e)//接收到包的处理 { int beginport = int.Parse(this.BeginPort.Text); int endport = int.Parse(this.EndPort.Text); string sourceport; string destinationport; string sourceip; var packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);//解析出基本包 var dlpacket = PacketDotNet.DataLinkPacket.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);//协议类别 var tcpPacket = PacketDotNet.TcpPacket.GetEncapsulated(packet);//TCP数据包 var ipPacket = PacketDotNet.IpPacket.GetEncapsulated(packet);//TCP数据包 if (tcpPacket != null) { var pa = tcpPacket; sourceport = tcpPacket.SourcePort.ToString(); destinationport = tcpPacket.DestinationPort.ToString(); sourceip = ipPacket.SourceAddress.ToString(); if (int.Parse(destinationport) == 6060&&tcpPacket.Syn==true) { LST.Invoke(new ShowInlist(tcpshowlist), new object[] { sourceport,sourceip }); } } } private delegate void ShowInlist(object sourceport,object sourceip); void tcpshowlist(object sourceport,object sourceip) { for (int i = 0; i < LST.Items.Count;i ) { if (sourceport.ToString() == LST.Items[i].Tag.ToString() || sourceport.ToString()=="6060") { return; } } ListViewItem lvi = new ListViewItem(); lvi.Name = "TCP"; lvi.Text = way; lvi.Tag = sourceport.ToString(); lvi.SubItems.Add(sourceip.ToString()); lvi.SubItems.Add(sourceport.ToString()); lvi.SubItems.Add("开放"); this.LST.Items.Add(lvi); } private void Connectscan() { long beginip = StringIPToUintIP(this.BeginIp.Text); long endip = StringIPToUintIP(this.EndIp.Text); ushort beginport = Convert.ToUInt16(this.BeginPort.Text); ushort endport = Convert.ToUInt16(this.EndPort.Text); progressBar1.Maximum = ((endport - beginport) 1);//设置最大长度值 progressBar1.Value = 0;//设置当前值 ParameterizedThreadStart threadStart = t => { for (long i = beginip; i <= endip; i ) { string x = NetworkUtils.LongToIPAddress(i).ToString(); for (int m = beginport; m <= endport; m ) { UpdateProgressBar(m.ToString()); bool result = false; TcpClient tc = new TcpClient(); //设置超时时间 tc.SendTimeout = tc.ReceiveTimeout = int.Parse(timeout.Text); try { //尝试连接 tc.Connect(x, m); if (tc.Connected) { LST.Invoke(new ShowInlist(tcpshowlist), new object[] { m.ToString(), x }); } } catch (System.Net.Sockets.SocketException e) { result = false; } finally { tc.Close(); tc = null; } } } }; Thread thread = new Thread(threadStart); thread.IsBackground = true; thread.Start(); } //全连接扫描 private void OnePort_CheckedChanged(object sender, EventArgs e) { this.EndPort.Text = this.BeginPort.Text; } private void button2_Click(object sender, EventArgs e) { } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论