Syed Jahanzaib Personal Blog to Share Knowledge !

April 12, 2017

Short Notes for C#

Filed under: Programming — Tags: , , , , , — Syed Jahanzaib / Pinochio~:) @ 11:45 AM

Following are few snippets / tips for C# used in various applications I made for personnel usage.

 


Declare Global Variables


namespace WindowsFormsApplication3
{

public partial class Form1 : Form
{

public class Globals
{

// defining File name in a folder

public static string LISTFILEPATH = @"C:\temp\list.txt";

// defining General variable to hold any result

public static string NETSTATUS = "";
}


Check if app is already running, if yes, then inform accordingly and EXIT the app !


private void Form1_Load(object sender, EventArgs e)
{
Process aProcess = Process.GetCurrentProcess();
string aProcName = aProcess.ProcessName;
if (Process.GetProcessesByName(aProcName).Length > 1)
{

MessageBox.Show("This APP is already running. Close previously running instance first!", "This APP  App Already Running !",
MessageBoxButtons.OK, MessageBoxIcon.Error);
System.Windows.Forms.Application.Exit();
Application.ExitThread();
Application.Exit();
}


Check for Folder / file, if not exists then create


// Check if directory exists
if (Directory.Exists(@"C:\temp\)"))
{
// IF IT EXISTS, DO NOTHING
}
else
// IF ITS NOT , CREATE IT
{
Directory.CreateDirectory(@"C:\temp\");
}
// IF IT EXISTS, DO NOTHING
if (File.Exists(Globals.LISTFILEPATH))
{
// Do nothing
}
else
// IF ITS NOT , CREATE IT
{
//File.Create(Globals.LISTFILEPATH);
using (StreamWriter sw = new StreamWriter(Globals.LISTFILEPATH, true))
{
//
}
}

Add some colors to your output text


// Some coloring fun
private void ColorRed()
{
StatusTextBox.SelectionColor = Color.Red;
}


Adding Bold Text


StatusTextBox.SelectionFont = new Font(StatusTextBox.Font, StatusTextBox.Font.Style | FontStyle.Bold);
this.StatusTextBox.AppendText("\r\n- Processing ...\r\n");
StatusTextBox.SelectionFont = new Font(StatusTextBox.Font, StatusTextBox.Font.Style | FontStyle.Regular);


Multiple IF Statement matching


if ((Globals.Variable1 == "0") && (Globals.Variable2 == "0"))

// then do this or that


Message Box with Warning sign & OK button

MessageBox.Show("Error on ping:", MessageBoxButtons.OK, MessageBoxIcon.Warning);

Running thread separately without hanging UI

await Task.Run(() =>
{

// your task

});
}

Testing Remote TCP Port Status

{
using(TcpClient tcpClient = new TcpClient())

try {
tcpClient.Connect("1.1.1.1", 80);
// Succeed OK ! show the result, you can update text box, variable etc anything of your choice

} catch (Exception) {
// FAILED ! show the result, you can update text box, variable etc anything of your choice
}
}

Getting Default Gateway(s) bypassing few types of interfaces


foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet);
{
if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

this.StatusTextBox.AppendText("\r\n" + ni.Name + "\r\n");
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
// Console.WriteLine(ip.Address.ToString());
this.StatusTextBox.AppendText("\r\n" + ip.Address.ToString() + "\r\n");
}
}
}
}


 ~iBBi – Pinger  ¯\_(ツ)_/¯   – Customized Ping App  for My 3 Kids ~

iBBi PINGER application code I made to continuously ping any remote host by ip or dns name, and output any error with some style colors and images. I made it for my kids who uses computers and occasionally my PTCL Evo gets hangs or internet stopped working and the kids have no idea whats going on this application runs in background and popup yellow or green icon and iconic message so kids can understand internet is not working. the task was very simple and it worked ok, but later I was bitten by an dangerous animal as known as ‘curiosity‘ which forcefully made to add do some late night testings to add/enhance some additional features which were totally useless or not required 😛 lol.

Following is unfinished product and contains some bugs as well. Still posting it as reference for myself , just in case I managed to burn my PC.


// iBBi Pinger program, small app that can ping remote host
// and shows any error in fancy style , colors, icons, trayicon notifications, etc etc
// April, 2017

using System;
using System.Diagnostics;
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.Threading;
using System.Windows.Forms;
using System.Net;
using System.Net.NetworkInformation;
using System.IO;
using System.Runtime.InteropServices;
using System.Net.Sockets;
using System.Reflection;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Text.RegularExpressions;

namespace WindowsFormsApplication3
{

public partial class Form1 : Form
{

public class Globals
{

public static string LISTFILEPATH = @"C:\temp\list.txt";
public static string DnsError = "0";
public static string currentNetStatus = "0";
public static string TCP_STATUS = "0";
public static string TCP_PORT = "80";
public static string GHOST = "";
public static string GOPING = "";
public static string PIP = "";
public static string LAN = "";
public static string NETSTATUS = "";
public static string DGW = "";
}

public Form1()
{
InitializeComponent();
Globals.NETSTATUS = "0";
StatusTextBox.SelectionColor = Color.Black;
pictureBox1.Image = null;
timer1.Stop();
timer2.Stop();
timer1.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
Process aProcess = Process.GetCurrentProcess();
string aProcName = aProcess.ProcessName;
if (Process.GetProcessesByName(aProcName).Length > 1)
{

MessageBox.Show("Pinger is already running. Close previously running instance first!", "Pinger App Already Running !",
MessageBoxButtons.OK, MessageBoxIcon.Error);
System.Windows.Forms.Application.Exit();
Application.ExitThread();
Application.Exit();
}

// Check if directory exists
if (Directory.Exists(@"C:\temp\)"))
{
// Do nothing
}
else
{
Directory.CreateDirectory(@"C:\temp\");
}
if (File.Exists(Globals.LISTFILEPATH))
{
// Do nothing
}
else
{
//File.Create(Globals.LISTFILEPATH);
using (StreamWriter sw = new StreamWriter(Globals.LISTFILEPATH, true))
{
//
}
}
string[] lineOfContents = File.ReadAllLines(Globals.LISTFILEPATH);
foreach (var line in lineOfContents)
{
string[] tokens = line.Split(',');
if (!comboBox1.Items.Contains(tokens[0]))
comboBox1.Items.Add(tokens[0]);
}
}
// Some coloring fun
private void ColorRed()
{
this.Invoke((MethodInvoker)delegate
{
StatusTextBox.SelectionColor = Color.Red;
});
}
private void ColorBlack()
{
this.Invoke((MethodInvoker)delegate
{
StatusTextBox.SelectionColor = Color.Black;
});
}
private void ColorBlue()
{
StatusTextBox.SelectionColor = Color.Blue;
}
private void ColorGreen()
{
StatusTextBox.SelectionColor = Color.Green;
}
private void ColorOrange()
{
StatusTextBox.SelectionColor = Color.Orange;
}
private async void PingButton_Click(object sender, EventArgs e)
{
Globals.GOPING = "1";
pictureBox1.Image = null;
ProgressPictureBox1.Image = null;
Globals.GHOST = comboBox1.Text;
StatusTextBox.SelectionFont = new Font(StatusTextBox.Font, StatusTextBox.Font.Style | FontStyle.Bold);
this.StatusTextBox.AppendText("\r\n- Processing ...\r\n");
StatusTextBox.SelectionFont = new Font(StatusTextBox.Font, StatusTextBox.Font.Style | FontStyle.Regular);
if (!comboBox1.Text.Contains('.'))
{
ColorRed();
this.StatusTextBox.AppendText("\r\n" + "Somethign missing ! Please select or enter valid Hostname or IP address !\r\n");
ColorBlack();
return;
}

{
if (string.IsNullOrEmpty(comboBox1.Text) || (comboBox1.Text == "Seleact or type Destination"))
{
ColorRed();
this.StatusTextBox.AppendText("\r\n" + "Please select or enter valid Hostname or IP address !\r\n");
ColorBlack();
pictureBox1.Image = null;
return;
}
else
{
PingButton.Enabled = false;
PingButton.Text = "Pinging...";
// IsNetworkAvailable();
//if (Globals.LAN == "")
//{
//this.StatusTextBox.AppendText("\r\n-PINGBUTTON CHECK- LAN DISCONNECTED!\r\n");
// TIMER_STOP_FUNC();
//return;
// }

//else
//{
//this.StatusTextBox.AppendText("\r\n-LAN OK!\r\n");
//}

TIMER_START_FUNC();
}
}
}




private void OnApplicationExit(object sender, EventArgs e)
{
try
{
if (notifyIcon1 != null)
{
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
}
}
catch { }
}
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}
private void restoreToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
TIMER_STOP_FUNC();
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
Application.Exit();
}
private void menuStrip1_Click(object sender, EventArgs e)
{
}
private void menuStrip1_MouseClick(object sender, MouseEventArgs e)
{
this.Show();
WindowState = FormWindowState.Normal;
}
private void Form1_Move(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
if ((Globals.currentNetStatus == "0") && (Globals.TCP_STATUS == "0"))
{
this.notifyIcon1.Icon = Properties.Resources.icon_standby;
}
else
{
this.notifyIcon1.Icon = Properties.Resources.icon_online;
}
this.Hide();
}
}
private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
{
TIMER_STOP_FUNC();
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
Application.Exit();
}
private void StopPing_Click(object sender, EventArgs e)
{
this.notifyIcon1.Icon = Properties.Resources.icon_standby;
ProgressPictureBox1.Image = null;
pictureBox1.Image = null;
if (timer1.Enabled == false)
//if (!timer1.Enabled)
{
StatusTextBox.SelectionColor = Color.Red;
this.StatusTextBox.AppendText("\r\n" + "Ping is not running !\r\n");
StatusTextBox.SelectionColor = Color.Black;
}
if (timer1.Enabled == true)
{
TIMER_STOP_FUNC();
ColorBlue();
StatusTextBox.SelectionFont = new Font(StatusTextBox.Font, StatusTextBox.Font.Style | FontStyle.Bold);
this.StatusTextBox.AppendText("\r\n" + "Stopped on User Request !\r\n");
StatusTextBox.SelectionFont = new Font(StatusTextBox.Font, StatusTextBox.Font.Style | FontStyle.Regular);
ColorBlack();
this.notifyIcon1.Icon = Properties.Resources.icon_standby;
ProgressPictureBox1.Image = null;
PingButton.Enabled = true;
PingButton.Text = "Start Ping";
pictureBox1.Image = null;
}
}
//}
private void SaveComboList_Click(object sender, EventArgs e)
{
using (StreamWriter writer = new StreamWriter(Globals.LISTFILEPATH, true))
{
try
{
if (comboBox1.Items.Contains(comboBox1.Text))
{
MessageBox.Show("The task '" + comboBox1.Text + "' already exist in list", "Task already exists");
}
else
{
comboBox1.Items.Add(comboBox1.Text);
writer.WriteLine(comboBox1.Text);
writer.Flush();
writer.Dispose();
}
}
catch
{
MessageBox.Show("The file '" + comboBox1.Text + "' could not be located", "File could not be located");
}
}
}
private void exitToolStripMenuItem1_Click_1(object sender, EventArgs e)
{
TIMER_STOP_FUNC();
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
Application.Exit();
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}
private void exitToolStripMenuItem2_Click(object sender, EventArgs e)
{
TIMER_STOP_FUNC();
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
Application.Exit();
}
private void exitToolStripMenuItem3_Click(object sender, EventArgs e)
{
TIMER_STOP_FUNC();
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
Application.Exit();
}
private void restoreToolStripMenuItem_Click_1(object sender, EventArgs e)
{
this.Show();
WindowState = FormWindowState.Normal;
}

private void PingCompletedCallback(object sender, PingCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(string.Format("Ping failed: {0}", e.Error.ToString()),
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
((AutoResetEvent)e.UserState).Set();
}
DisplayReply(e.Reply);
((AutoResetEvent)e.UserState).Set();
}
public void DisplayReply(PingReply reply)
{
if (timer1.Enabled)
{
string host = Globals.GHOST;
Ping ping = new Ping();
var pingSender = new Ping();
try
{
if (reply.Status == IPStatus.Success)
{
this.Invoke((MethodInvoker)delegate
{
ColorGreen();
this.StatusTextBox.AppendText(string.Format("{0}\r\n", reply.Status + " -- delay ms > " + reply.RoundtripTime.ToString() + " for > " + comboBox1.Text + " - " + Globals.PIP));
ColorBlack();
Globals.currentNetStatus = "1";
pictureBox1.Image = Properties.Resources.online_image;
this.notifyIcon1.Icon = Properties.Resources.icon_online;
});
}
else
{
Globals.currentNetStatus = "0";
Globals.TCP_STATUS = "0";
TestTCPConn();
this.textBox1.Text = Globals.currentNetStatus;
this.textBox2.Text = Globals.TCP_STATUS;
if ((Globals.currentNetStatus == "0") && (Globals.TCP_STATUS == "1"))
{
this.Invoke((MethodInvoker)delegate
{
this.StatusTextBox.AppendText(string.Format("\r\n Ping Timeout but PORT " + Globals.TCP_PORT + " responding > " + comboBox1.Text + " - " + Globals.PIP));
pictureBox1.Image = Properties.Resources.online_image;
});
//this.notifyIcon1.Icon = Properties.Resources.icon_online;
}
if ((Globals.currentNetStatus == "0") && (Globals.TCP_STATUS == "0"))
//}
if ((Globals.currentNetStatus == "0") && (Globals.TCP_STATUS == "0"))
if (timer1.Enabled)
{
this.Invoke((MethodInvoker)delegate
{
pictureBox1.Image = Properties.Resources.offline_image;
this.notifyIcon1.Icon = Properties.Resources.icon_standby;
this.StatusTextBox.AppendText(string.Format("PING + PORT test Failed > " + comboBox1.Text + " - " + Globals.PIP + "\r\n"));
});
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error on ping:" + ex.Message, "Error on ping!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}

private void timer1_Tick(object sender, EventArgs e)
{
IsNetworkAvailable();
if (Globals.LAN == "")
{
this.StatusTextBox.AppendText("\r\n-Timer1_TICK Section: No Active Local Network Found. Exiting ...\r\n");
this.ProgressPictureBox1.Image = Properties.Resources.ProgressPictureBox1;
gdnslabel.Text = "Warning: LAN is disconnected ...";
Globals.currentNetStatus = "0";
Globals.TCP_STATUS = "0";
pictureBox1.Image = Properties.Resources.lan_disconnected;
//this.notifyIcon1.Icon = Properties.Resources.icon_standby;
return;
}
else
{
TestPInger();
}
}
protected void TIMER_STOP_FUNC()
{
comboBox1.Enabled = true;
Globals.PIP = "";
timer1.Stop();
timer2.Stop();
gdnslabel.Text = null;
timer1.Enabled = false;
ProgressPictureBox1.Image = null;
pictureBox1.Image = null;
PingButton.Enabled = true;
PingButton.Text = "Start Ping";
}
protected void TIMER_START_FUNC()
{
this.Invoke((MethodInvoker)delegate
{
comboBox1.Enabled = false;
PingButton.Enabled = false;
PingButton.Text = "Pinging ...";
ProgressPictureBox1.Image = Properties.Resources.ProgressPictureBox1;
timer1.Start();
//timer2.Start();
});
}
private static IPAddress GetIpFromHost(ref string host)
{
string errMessage = string.Empty;
IPAddress address = null;
try
{
address = Dns.GetHostByName(host).AddressList[0];
}
catch (SocketException ex)
{
}
return address;
}

private void RemoveList_Click(object sender, EventArgs e)
{
comboBox1.Items.Clear();
File.Create(Globals.LISTFILEPATH).Close();
}
private void ExitImage_Click(object sender, EventArgs e)
{
TIMER_STOP_FUNC();
notifyIcon1.Visible = false;
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
notifyIcon1 = null;
Application.Exit();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
TIMER_STOP_FUNC();
Application.Exit();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
}
private async void TestPInger()
{
//MessageBox.Show(Globals.LAN);
IsNetworkAvailable();
if (Globals.LAN == "")
{
this.StatusTextBox.AppendText("\r\n-Testpinger Section: No Active Local Network Found. Exiting ...\r\n");
this.ProgressPictureBox1.Image = Properties.Resources.ProgressPictureBox1;
gdnslabel.Text = "Warning: Disconnected ...";
Globals.currentNetStatus = "0";
Globals.TCP_STATUS = "0";
pictureBox1.Image = Properties.Resources.lan_disconnected;
//this.notifyIcon1.Icon = Properties.Resources.icon_standby;
return;
}
else
{
//gdnslabel.Text = "INFO: LAN is Connected.";
pictureBox1.Image = null;
}

CheckDGW();
if (Globals.DGW == "")
{
//this.StatusTextBox.AppendText("\r\n- testpinger - OOOOOOOOO No IPV4 Gateway found\r\n");
//TIMER_STOP_FUNC();
return;
}
else
{
//this.StatusTextBox.AppendText("\r\n- LAN Ok. proceeding further ...\r\n");
this.pictureBox1.Image = null;
}
{
await Task.Run(() =>
{
try
{
string host = Globals.GHOST;
int timeout = 1000;
var pingSender = new Ping();
AutoResetEvent waiter = new AutoResetEvent(false);
if (Globals.PIP == "")
{
IPAddress hostAddress = Dns.GetHostByName(host).AddressList[0];
Globals.PIP = hostAddress.ToString();
}
else
{
pingSender.PingCompleted += PingCompletedCallback;
pingSender.SendAsync(Globals.PIP, timeout, waiter);
}
}
catch (SocketException ex)
{
this.notifyIcon1.Icon = Properties.Resources.icon_standby;
this.Invoke((MethodInvoker)delegate
{
ColorRed();
this.StatusTextBox.AppendText("\r\n-DNS ERROR: unable to resolve > " + Globals.GHOST + " - Retrying in few seconds! \r\n");
ProgressPictureBox1.Image = Properties.Resources.ProgressPictureBox1;
pictureBox1.Image = Properties.Resources.dnsproblem_image;
Globals.currentNetStatus = "0";
Globals.TCP_STATUS = "0";
ColorBlack();
});
}
});
}
}
private void TestTCPConn()
{
using(TcpClient tcpClient = new TcpClient())

try {
tcpClient.Connect(Globals.GHOST, 80);
Globals.TCP_STATUS = "1";
} catch (Exception) {
Globals.TCP_STATUS = "0";
}
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
}
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
Keys key = e.KeyCode;
if (key == Keys.Space)
{
e.Handled = true;
}
base.OnKeyDown(e);
}
private void comboBox1_Leave(object sender, EventArgs e)
{
string str = comboBox1.Text;
comboBox1.Text = str.Replace(" ", String.Empty);
//MessageBox.Show("Don't accept Space char in your name");
this.Focus();
}
private void StatusTextBox_TextChanged_1(object sender, EventArgs e)
{
StatusTextBox.SelectionStart = StatusTextBox.Text.Length;
StatusTextBox.ScrollToCaret();
}
public static class ThreadHelperClass
{
delegate void SetTextCallback(Form f, Control ctrl, string text);
public static void SetText(Form form, Control ctrl, string text)
{
if (ctrl.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
form.Invoke(d, new object[] { form, ctrl, text });
}
else
{
ctrl.Text += text;
}
}
}
private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void timer2_Tick(object sender, EventArgs e)
{
IsOnline();
if (timer1.Enabled)
// if ((Globals.currentNetStatus == "0") && (Globals.TCP_STATUS == "1"))
if (Globals.currentNetStatus == "1")
{
this.notifyIcon1.Icon = Properties.Resources.icon_online;
}
if (timer1.Enabled)
if (Globals.TCP_STATUS == "1")
{
this.notifyIcon1.Icon = Properties.Resources.icon_online;
}
if (timer1.Enabled)
if ((Globals.currentNetStatus == "0") && (Globals.TCP_STATUS == "0"))
{
this.notifyIcon1.Icon = Properties.Resources.icon_standby;
}
}
public static IPAddress GetDefaultGateway()
{
//IsNetworkAvailable();
IPAddress result = null;
var cards = NetworkInterface.GetAllNetworkInterfaces().ToList();
if (cards.Any())
{
foreach (var card in cards)
{
var props = card.GetIPProperties();
if (props == null)
continue;

var gateways = props.GatewayAddresses;
if (!gateways.Any())
continue;
var gateway =
gateways.FirstOrDefault(g => g.Address.AddressFamily.ToString() == "InterNetwork");
if (gateway == null)
continue;
result = gateway.Address;
MessageBox.Show(result.ToString());
//MessageBox.Show(result.ToString());
if (result == null)
//MessageBox.Show("NO GW");
MessageBox.Show(result.ToString());
break;
};
}
// var dgw = result.ToString();
// if (dgw == null)
MessageBox.Show(result.ToString());
return result;
}

public static bool IsNetworkAvailable()
{
return IsNetworkAvailable(0);
}

protected async void IsOnline()
{
IsNetworkAvailable();
if (Globals.LAN == "")
{
ColorRed();
this.StatusTextBox.AppendText("\r\\nIsNetworkAvailable section: WARNING: No Active Local Network Found.");
ColorBlack();
Globals.currentNetStatus = "0";
Globals.TCP_STATUS = "0";
//return;
}
else
{
CheckDGW();
if (Globals.LAN == "")
{
ColorRed();
this.StatusTextBox.AppendText("\r\nisnetworkavailable section: WARNING: No Active Local Network Found...");
ColorBlack();
Globals.currentNetStatus = "0";
Globals.TCP_STATUS = "0";
TIMER_STOP_FUNC();
}
else

if (Globals.DGW == "")
{
this.StatusTextBox.AppendText("\r\n-Error: Cannot continue without valid IPV4 Gateway! Please verify your network settings & make sure it is connected with working network.\r\n");
//TIMER_START_FUNC();
//zaib
return;
}

await Task.Run(() =>
{
{
{
if (Globals.LAN == "" | Globals.DGW == "")
return;
}
try
{
Ping x = new Ping();
PingReply reply = x.Send("8.8.8.8");
if (reply.Status == IPStatus.Success)
{
//return true;
Globals.NETSTATUS = "1";
this.Invoke((MethodInvoker)delegate
{
gdnslabel.Text = "INFO: Google DNS is reachable by ICMP protocol.";
});
}
else
{
//if host is not reachable.
// return false;
Globals.NETSTATUS = "0";
this.Invoke((MethodInvoker)delegate
{
gdnslabel.Text = "Warning: Google DNS is NOT reachable by ICMP protocol!";
});
}
}
catch (SocketException ex)
{
{
//this.notifyIcon1.Icon = Properties.Resources.icon_standby;
}
}
}
});
}
}

public static bool IsNetworkAvailable(long minimumSpeed)
{
//Form1 frm1 = new Form1();
if (!NetworkInterface.GetIsNetworkAvailable())
return false;
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if ((ni.OperationalStatus != OperationalStatus.Up) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) ||
// (ni.NetworkInterfaceType == NetworkInterfaceType.vir) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel))

continue;
if (ni.Speed < minimumSpeed)
continue;

if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase))
continue;

if ((ni.Description.IndexOf("Network Bridge", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Network Bridge", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
//MessageBox.Show("LAN FOUND");
Globals.LAN = "1";
//Form1 frm1 = new Form1();
//this.StatusTextBox.AppendText("\r\n- Section: LAN is ok ...\r\n");
return true;
}
//MessageBox.Show("LAN NOT FOUND");
Form1 frm1 = new Form1();
frm1.StatusTextBox.AppendText("\r\nIsNetworkAvailable(long minimumSpeed) Section: WARNING: No Active Local Network Found...");
frm1.StatusTextBox.AppendText("\r\n-Error: Cannot conitnue without valid IPV4 Gateway/! Please verify your network settings & make sure it is connected with working network.\r\n");
Globals.LAN = "0";
return false;

}

protected async void CheckDGW()
{
IPAddress result = null;
var cards = NetworkInterface.GetAllNetworkInterfaces().ToList();
if (cards.Any())
{
foreach (var card in cards)
{
var props = card.GetIPProperties();
if (props == null)
continue;

var gateways = props.GatewayAddresses;
if (!gateways.Any())
continue;
var gateway =
gateways.FirstOrDefault(g => g.Address.AddressFamily.ToString() == "InterNetwork");
if (gateway == null)
// Globals.DGW = "";
//this.StatusTextBox.AppendText("\r\n- No Network or IPV4 Gateway found. Cannot continue without them!\r\n");
//this.StatusTextBox.AppendText("if gw is null entry Your IPV4 Gateway is >" + Globals.DGW + "\r\n");
continue;

result = gateway.Address;
Globals.DGW = result.ToString();
// this.StatusTextBox.AppendText("Your IPV4 Gateway is >" + Globals.DGW + "\r\n");
break;
//MessageBox.Show("GATEWAY IS NULL2");
};
}
//if (Globals.DGW == "")
// ColorRed();
//this.StatusTextBox.AppendText("\r\n- No Network or IPV4 Gateway found. Cannot continue without them!\r\n");
//ColorBlack();
//return;
//return result;
var regx = new Regex("[:]");
if (regx.IsMatch(Globals.DGW))
{
this.StatusTextBox.AppendText("\r\n- ipv6 detected!\r\n");
MessageBox.Show("IPV6 detected");
Globals.DGW = "";
}
//MessageBox.Show(Globals.DGW);
if (Globals.DGW == "")
{

//this.StatusTextBox.AppendText("NULL Gateway >" + Globals.DGW + "\r\n");
//MessageBox.Show("GATEWAY IS NULL");
Globals.DGW = "";
// TIMER_STOP_FUNC();
//return;

}
else
{
//this.StatusTextBox.AppendText("Your IPV4 Gateway is >" + Globals.DGW + "\r\n");
}
}

private void button2_Click_2(object sender, EventArgs e)
{
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet);
{
if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Network Bridge", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Network Bridge", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

this.StatusTextBox.AppendText("\r\n" + ni.Name + "\r\n");
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
// Console.WriteLine(ip.Address.ToString());
this.StatusTextBox.AppendText("\r\n" + ip.Address.ToString() + "\r\n");
}
}
}
}

}

private void button1_Click(object sender, EventArgs e)
{
using (TcpClient tcpClient = new TcpClient())
{
try
{
tcpClient.Connect("dell.com", 80);
Console.WriteLine("Port open");
}
catch (Exception)
{
Console.WriteLine("Port closed");
}
}
}

private void button3_Click(object sender, EventArgs e)
{

}

private void button2_Click_1(object sender, EventArgs e)
{
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet);
{
if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Vmware", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Loopback", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Isatap", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Tunnel", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
if ((ni.Description.IndexOf("Network Bridge", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Network Bridge", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

if ((ni.Description.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("Microsoft 6to4 Adapter", StringComparison.OrdinalIgnoreCase) >= 0))
continue;

this.StatusTextBox.AppendText("\r\n" + ni.Name + "\r\n");
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
// Console.WriteLine(ip.Address.ToString());
this.StatusTextBox.AppendText("\r\n" + ip.Address.ToString() + "\r\n");
}
}
}
}

}

}

}

 

March 30, 2017

C# Active Directory Management using custom built App!

Filed under: Programming — Tags: , , , , , — Syed Jahanzaib / Pinochio~:) @ 11:01 AM

c

This is just another reference example post, on how you can use C# code to connect with active directory in order to perform some basic tasks , using one window operation approach. It’s simple, fast, and works well enough to cater the OP requirements. You can add your own functions in it as required. You can use use/modify/redistribute this code freely. no obligations.

stackoverflow


Task:

A simple program which can display all Active Directory users in a Drop down List menu, and based on the selection, it can perform various actions like

  • Check Status of User
  • Disable Account
  • Enable Account
  • While preventing any access to Admin account(s)

Something like below …

logo

Requirements:

  • Target framework is 4.x. [Latest is good because of its extensive support for various  enormous operations.]
  • Reference of Active Directory Modules

To add refrence to proect, Goto PROJECTS > ADD REFERENCE  > FRAMEWORK

Add following …

  • System.DirectoryServices
  • System.DirectoryServices.ActiveDirectory
  • System.DirectoryServices.AccountManagement

reference.PNG

The program must be run via Administrator account or account with admin privileges

CODE:

Here is the full code. Based on this code, we can add many other functions, this is just for example purposes.

Form1.cs


// C# code to manage Active Directory functions
// like enable/disable user account via drop down menu list
// Syed Jahanzaib / aacable at hotmail dot com
// March, 2017
using System;
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.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.DirectoryServices.AccountManagement;
using System.Configuration;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
new ToolTip().SetToolTip(comboBox1, "Click here to see user list");
}
private void button1_Click(object sender, EventArgs e)
{
String _ADUserName = comboBox1.Text; // <-- The textbox you enter your username?
if (string.IsNullOrEmpty(comboBox1.Text) || comboBox1.Text == "0")
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Please Enter Username!\n\r");
return;
}
PrincipalContext context = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, comboBox1.Text.Trim());
if (comboBox1.Text == "ADMIN1" | comboBox1.Text == "ADMIN2")
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Dont get over smart. You are 'NOT' authorized to change admin accounts state!\n\r");
return;
}
if (user == null)
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - not found in AD!\n\r");
return;
}
if (user.Enabled == false)
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - User is already DISABLED.\n\r");
return;
}
if (user.Enabled == true)
DiableADUserUsingUserPrincipal(_ADUserName);
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - is now DISABLED.\n\r");
}
private static bool DiableADUserUsingUserPrincipal(string username)
{
try
{
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity
(principalContext, username);
userPrincipal.Enabled = false;
userPrincipal.Save();
return true;
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
}
return false;
}
private static bool EnableADUserUsingUserPrincipal(string username)
{
try
{
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity
(principalContext, username);
userPrincipal.Enabled = true;
userPrincipal.Save();
return true;
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
}
return false;
}
private void button2_Click(object sender, EventArgs e)
{
{
String _ADUserName = comboBox1.Text; // <-- The textbox you enter your username?
if (string.IsNullOrEmpty(comboBox1.Text) || comboBox1.Text == "0")
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Please Enter Username!\n\r");
return;
}
PrincipalContext context = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, comboBox1.Text.Trim());

if (comboBox1.Text == "ADMIN1" | comboBox1.Text == "ADMIN2")
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Dont get over smart. You are 'NOT' authorized to change admin accounts state!\n\r");
return;
}
if (user == null)
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - not found in AD!\n\r");
return;
}
if (user.Enabled == true)
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - User is already ENABLED.\n\r");
return;
}
if (user.Enabled == false)
EnableADUserUsingUserPrincipal(_ADUserName);
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - is now ENABLED.\n\r");
}
}
private void UserStatusButton_Click(object sender, EventArgs e)

{
String _ADUserName = comboBox1.Text; // <-- The textbox you enter your username?
if (string.IsNullOrEmpty(comboBox1.Text) || comboBox1.Text == "0")
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Please Enter Username!\n\r");
return;
}
PrincipalContext context = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, comboBox1.Text.Trim());

if (comboBox1.Text == "ADMIN1" | comboBox1.Text == "ADMIN2")
{
this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Dont get over smart. You are 'NOT' authorized to change admin accounts state!\n\r");
return;
}
if (user.Enabled == true) this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Status is ENABLED.\n\r");
else this.StatusTextBox.AppendText("\r\n" + _ADUserName + " - Status is DISABLED.\n\r"); ;
}
private void Form1_Load(object sender, EventArgs e)
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal qbeUser = new UserPrincipal(ctx);
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
foreach (var found in srch.FindAll())
{
UserPrincipal foundUser = found as UserPrincipal;
if (foundUser != null)
{
comboBox1.Items.Add(foundUser.SamAccountName);
}
}
}
private void linkLabel1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("https://aacable.wordpress.com");
}

private void comboBox1_MouseHover(object sender, EventArgs e)
{
//ToolTip tt = new ToolTip();
//tt.Show("Click here to see user list", this.comboBox1, 2000);
}
}
}
// Code Ends Here. Take Care

Form1.Designer.cs


namespace WindowsFormsApplication2
{
partial class Form1
{
///
<summary>
/// Required designer variable.
/// </summary>

private System.ComponentModel.IContainer components = null;

///
<summary>
/// Clean up any resources being used.
/// </summary>

/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

///
<summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.StatusTextBox = new System.Windows.Forms.TextBox();
this.UserStatusButton = new System.Windows.Forms.Button();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(157, 70);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(88, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Disable User";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(157, 41);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(88, 23);
this.button2.TabIndex = 2;
this.button2.Text = "Enable User";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// StatusTextBox
//
this.StatusTextBox.BackColor = System.Drawing.Color.Black;
this.StatusTextBox.Cursor = System.Windows.Forms.Cursors.Arrow;
this.StatusTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.StatusTextBox.ForeColor = System.Drawing.SystemColors.Window;
this.StatusTextBox.Location = new System.Drawing.Point(263, 12);
this.StatusTextBox.Margin = new System.Windows.Forms.Padding(1);
this.StatusTextBox.Multiline = true;
this.StatusTextBox.Name = "StatusTextBox";
this.StatusTextBox.ReadOnly = true;
this.StatusTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.StatusTextBox.Size = new System.Drawing.Size(276, 216);
this.StatusTextBox.TabIndex = 3;
this.StatusTextBox.Text = "Status Box ...";
//
// UserStatusButton
//
this.UserStatusButton.Location = new System.Drawing.Point(157, 12);
this.UserStatusButton.Name = "UserStatusButton";
this.UserStatusButton.Size = new System.Drawing.Size(88, 23);
this.UserStatusButton.TabIndex = 4;
this.UserStatusButton.Text = "Check Status";
this.UserStatusButton.UseVisualStyleBackColor = true;
this.UserStatusButton.Click += new System.EventHandler(this.UserStatusButton_Click);
//
// comboBox1
//
this.comboBox1.AllowDrop = true;
this.comboBox1.BackColor = System.Drawing.SystemColors.Info;
this.comboBox1.DropDownHeight = 215;
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.ForeColor = System.Drawing.Color.Black;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.IntegralHeight = false;
this.comboBox1.ItemHeight = 13;
this.comboBox1.Location = new System.Drawing.Point(6, 12);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(136, 21);
this.comboBox1.Sorted = true;
this.comboBox1.TabIndex = 5;
this.comboBox1.MouseHover += new System.EventHandler(this.comboBox1_MouseHover);
//
// linkLabel1
//
this.linkLabel1.AutoSize = true;
this.linkLabel1.Location = new System.Drawing.Point(260, 232);
this.linkLabel1.Name = "linkLabel1";
this.linkLabel1.Size = new System.Drawing.Size(279, 13);
this.linkLabel1.TabIndex = 7;
this.linkLabel1.TabStop = true;
this.linkLabel1.Text = "Management of Active Directory in C# by Syed.Jahanzaib";
this.linkLabel1.Click += new System.EventHandler(this.linkLabel1_Click);
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(6, 156);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(239, 72);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 6;
this.pictureBox1.TabStop = false;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(544, 248);
this.Controls.Add(this.linkLabel1);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.UserStatusButton);
this.Controls.Add(this.StatusTextBox);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.Text = "Active Directory Management Panel !";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion

private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TextBox StatusTextBox;
private System.Windows.Forms.Button UserStatusButton;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.LinkLabel linkLabel1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.ToolTip toolTip1;
}
}


0fb310fdff985ec27edf24c236b1e2f3

Regard’s
Syed Jahanzaib


Contact !

 

March 20, 2017

C# PPPoE Dialer Application Code

Filed under: Programming — Tags: , , , , , — Syed Jahanzaib / Pinochio~:) @ 4:35 PM

vc.png

pppoe dialer ver 2

Video of code working (old v1 dialer) is available at YT !
> https://youtu.be/SlryR7ykSqw

[Watch in 720p HD or above to view proper text]


~ Sharing Knowledge ~
~ For Any One Who Wants to Learn ~

I am writing this post to share PPPoE Dialer program which I made using Visual Studio 2012 C#.

 This program can create / dial / disconnect a broadband pppoe connection on Windows 7 base Operating System. I have added many functions according to the local requirements. It was all built for my local lab testing purposes therefore there is a lot of room for improvements in it. Just to remind myself, I am not even a programmer, but a simple low level network support personnel. This is my first Try code in C# programming. It took me full two weeks late night working to develop this code.

Google search and Stack-overflow queries made it possible to create such program for a dumb person like Me.

Moment of Truth!

In general ISP/Networks, nowadays everyone is using WiFi routers therefore this dialer won’t be useful in such scenarios. but still its good to have some branding stuff for clients who directly use desktop / laptop computers to dial in to your server for the internet access.

Very Sadly ! Most of the programmers / knowledgeable persons I know in my  contacts clearly denied to share any code / working solution with the public & advised me NOT to share such code freely, like the Joker once said in a movie scene.

if u r good.png

We shouldn’t have any issue with this approach in practical, because Obviously if some one works hard to design a solution that can be utilized commercially , its his right to ask for money. I expect no one bound to agree with my statement here.

But here I am. sharing my basic knowledge for anyone who wants to learn from it ! ~

If anyone want customized branding with there Logo / Numbers in this dialer, you know my email.

~z@iB


Components Used:

  • OS: Windows 7 (64bit)
  • Launching Pad: Visual Studio 2012
  • Language: C Sharp (C#)
  • Support Libraries: Dotras 1.3 (https://dotras.codeplex.com/)
  • .Net Framework 4.x Library for Dotras

Requirements at Client PC:

  • the code targets .net framework 4.5 library support, & the bundled setup i made, already have .Net Framework 4.5 bundled . So if its not installed at client computer , it will auto deploy it.

DOWNLOAD !!!

Internet Dialer Complete Program ! [pppoe broadband dialer]

 


Code Working Workflow Example:

  • Username / Password Boxes: This must be filled first time, & the code will save it in the registry. Next time the dialer is launched , it will  read the credentials to avoid entering the id password again im boxes)
  • Auto Redial Check box: If selected, the system will auto redial in case of disconnection.
  • Dial Button: which will basically dial the pppoe connection & upon successfull connection, it will minimize the window. It will also check if dialer is already connected.
  • Disconnect Button: You know what disconnect means :). It will disconnect the dialer only if the dialer is really connected. Plus it will will not auto redial because the user have manually disconnected the connection.
  • Exit: This will close this application.
  • Create internet Dialer Button: This will create pppoe dialer connection in Network Connections plus its shortcut on current user desktop, and if connection already exists, then it will inform user accordingly.
  • Dialer LAN Status Button: It will check if the dialer is connected or not in the status text box.
  • Balloon Texts / Notifications: When application is minimized to System Tray, connect / disconnect events.
  • Auto Minimize: on connect / manual disconnect
  • Tray Icon Menu Strip Menu Context to Show/Exit app. Example to show function.
  • Total Data Download/Upload in labels for current session.
  • Dialer Connected Time.
  • Display Dialer Internet IP.
  • Picture box to show connectivity
  • Check Gateway Button.
  • The code will keep checking the dialer status (every 5sec) /net status  (every 10sec) and update the text label accordingly.
  • Many other small enhancements

I must be missing some other functions but this was all required at a moment.

I will update more later if got the chance…

Ok lets hit the Road , and view the code …


the SOURCE-CODE Journey !

// PPPoE Internet Dialer - Broadband PPPoE Dialer V 2.0
// Dear Humans, You are absolutely free to use it as you like
// This PPPoE dialer program is made in C#
// using Visual Studio 2012 with .Net Framework 4.5 & Dotras Library
// Syed Jahanzaib / aacable @ hotmail . com
// http : // aacable . wordpress . com
// March, 2017
using System;
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 DotRas;
using Microsoft.Win32;
using System.Net;
using System.IO;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Diagnostics;
namespace pppoe_dialer___zaib_last
{
public partial class Form1 : Form
{
public class Globals
{
public static string PPPNAME = "Internet-Dialer";
public static string dcmanual = "0";
public static string RedialCheckValue = "0";
NetworkInterface networkInterface;
long lngBytesSend;
long lngBtyesReceived;

}
private Timer _timer;
private DateTime _startTime = DateTime.MinValue;
private TimeSpan _currentElapsedTime = TimeSpan.Zero;
private TimeSpan _totalElapsedTime = TimeSpan.Zero;
private bool _timerRunning = false;

DateTime _started = DateTime.UtcNow;
DateTime startTime = new DateTime();
private NetworkInterface[] nicArr;
int lanInterval = 2; //3 sec
int netInterval = 10; //10 sec
private Timer timer;
private const double timerUpdate = 1000;

//private bool willClose;
private bool connected;
private RasHandle handle = null;
private RasHandle Rashandler = null;
private RasConnection connection = null;
//DateTime startTime = new DateTime();

public Form1()
{
InitializeComponent();
if (RedialCheckBox.Checked)
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will auto Redial if get disconnected."));
Globals.RedialCheckValue = "YES";
}
InitializeNetworkInterface();
InitializeTimer();
_timer = new Timer();
_timer.Interval = 1000;
_timer.Tick += new EventHandler(_timer_Tick);

Timer t = new Timer();
t.Interval = 1000; //1 sec
t.Tick += new EventHandler(t_Tick);
t.Start();

var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
startelptimer();
}
if (conn != null)
{
var local = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.Name == Globals.PPPNAME).FirstOrDefault();
var stringAddress = local.GetIPProperties().UnicastAddresses[0].Address.ToString();
var ipAddress1 = IPAddress.Parse(stringAddress);
pppip.Text = ipAddress1.ToString();
notifyIcon1.Icon = Resource1.icon_online;
this.pictureBox2.Image = Resource1.net_conn_image_1;

}
else
{
this.pictureBox2.Image = Resource1.net_disconnected_image_2;
sl2.Text = "Disconnected";
}

}

void _timer_Tick(object sender, EventArgs e)
{
var timeSinceStartTime = DateTime.Now - _startTime;
timeSinceStartTime = new TimeSpan(timeSinceStartTime.Hours,
timeSinceStartTime.Minutes,
timeSinceStartTime.Seconds);
_currentElapsedTime = timeSinceStartTime + _totalElapsedTime;
sl2.Text = timeSinceStartTime.ToString();
}

private void timerdialer_Tick(object sender, EventArgs e)
{
var timeSinceStartTime = DateTime.Now - _startTime;
timeSinceStartTime = new TimeSpan(timeSinceStartTime.Hours,
timeSinceStartTime.Minutes,
timeSinceStartTime.Seconds);
_currentElapsedTime = timeSinceStartTime + _totalElapsedTime;
sl2.Text = timeSinceStartTime.ToString();
}

private void timerStart_Click(object sender, EventArgs e)
{
// If the timer isn't already running
// Set the start time to Now
_startTime = DateTime.Now;

// Store the total elapsed time so far
//_totalElapsedTime = _currentElapsedTime;

_timer.Start();
_timerRunning = true;

}

private void InitializeNetworkInterface()
{

// Grab all local interfaces to this computer
nicArr = NetworkInterface.GetAllNetworkInterfaces();
// Add each interface name to the combo box
for (int i = 0; i < nicArr.Length; i++)
cmbInterface.Items.Add(nicArr[i].Name);
// Change the initial selection to the first interface
cmbInterface.SelectedIndex = 0;
}

private void InitializeTimer()
{
timer = new Timer();
timer.Interval = (int)timerUpdate;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}

void t_Tick(object sender, EventArgs e)
{
lanInterval--;
netInterval--;

if (lanInterval == 0)
{
checkpppstatus();
lanInterval = 2; //reset to base value
}

if (netInterval == 0)
{
// checknetstatus();
netInterval = 10; //reset to base value
}
}
protected void checkpppstatus()
{
this.Invoke((MethodInvoker)delegate
{
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
dialerStatus.Text = "Connected !";
//connstatus.ForeColor = System.Drawing.Color.Green;
}
else
{
dialerStatus.Text = "Disconnected !";
connstatus.ForeColor = System.Drawing.Color.Red;
pppip.Text = "---";
sl2.Text = "Dicsonnected !";
}
});
}

protected void checknetstatus()
{
if (IsOnline(textBox1.Text) == true)
{
//internetStatusLabel.ForeColor = System.Drawing.Color.Green;
string Status = "Connected !";
// internetStatus.Text = Status;
}
else
{
// internetStatusLabel.ForeColor = System.Drawing.Color.Red;
string Status = "DOWN";
// internetStatus.Text = Status;
}
}

protected void Displaynotify()
{
try
{
notifyIcon1.BalloonTipTitle = "You have successfully connected to the Internet ...";
notifyIcon1.BalloonTipText = "Internet Connected ...";
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(5000);
}
catch (Exception ex)
{
}
}

protected void stopelptimer()
{
// If the timer isn't already running
// Set the start time to Now
_startTime = DateTime.Now;

// Store the total elapsed time so far

//_totalElapsedTime = _currentElapsedTime;

_timer.Stop();
_timerRunning = false;
TimeSpan _currentElapsedTime = TimeSpan.Zero;
TimeSpan _totalElapsedTime = TimeSpan.Zero;
_totalElapsedTime = _currentElapsedTime;

_timer.Stop();
_timerRunning = false;

}

protected void startelptimer()
{
// If the timer isn't already running
// Set the start time to Now
_startTime = DateTime.Now;

// Store the total elapsed time so far
//_totalElapsedTime = DateTime.Now;
_timer.Start();
_timerRunning = true;
}

protected void Displaynotifyfordisconnect()
{
try
{
notifyIcon1.BalloonTipTitle = "Internet Dialer DISCONNECTED !!!";
notifyIcon1.BalloonTipText = "Internet Disconnected !!!";
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(5000);
// MessageBox.Show("DC");
{
this.Invoke((MethodInvoker)delegate
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "\r\nDialer Disconnected !"));
});
}
}
catch (Exception ex)
{
}
}

private void saveCredential(string username, string password, bool remember, bool auto)
{
RegistryKey hkcu = Registry.CurrentUser;
RegistryKey software = hkcu.OpenSubKey("Software", true);
RegistryKey zaib = software.CreateSubKey("zaib");
zaib.SetValue("username", username, RegistryValueKind.String);
zaib.SetValue("password", password, RegistryValueKind.String);
if (Globals.RedialCheckValue == "YES")
{
zaib.SetValue("autoredial", "YES", RegistryValueKind.String);
}
else
{
zaib.SetValue("autoredial", "NO", RegistryValueKind.String);
}

zaib.Close();
}

private void readCredential()
{
RegistryKey hkcu = Registry.CurrentUser;
RegistryKey software = hkcu.OpenSubKey("Software", true);
RegistryKey zaib = software.CreateSubKey("zaib");
try
{
textBox1.Text = (string)zaib.GetValue("username", "");
textBox2.Text = (string)zaib.GetValue("password", "");
textBox3.Text = (string)zaib.GetValue("autoredial", "");
if (textBox3.Text == "YES")
{
RedialCheckBox.Checked = true;
}
else
{
RedialCheckBox.Checked = false;
}

}
catch (Exception ex)
{
// never saved
}
zaib.Close();
}

private void Form1_Move_1(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide();
notifyIcon1.ShowBalloonTip(2000, "Internet Dialer - Broadband PPPoE Dialer V 2.0", "The App has be moved to the tray.", ToolTipIcon.Info);
checkpppstatus();
}
}

private void button1_Click(object sender, EventArgs e)
{
string path;
path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
using (RasPhoneBook pbk = new RasPhoneBook())
{
pbk.Open(path);
RasEntry entry = RasEntry.CreateBroadbandEntry(Globals.PPPNAME, RasDevice.GetDeviceByName("PPPOE", RasDeviceType.PPPoE, false));
// Configure any options for your entry here via entry.Options
entry.RedialCount = 99;
// Finally Add the PPPOE Dialer in the network connection , hurrahhhh , zaib
// If Preiovus Entry found, delete, and reacreate
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
//MessageBox.Show("Same Dialer Already connected ! First Disconnect it to re-create new.");
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer Already connected ! First Disconnect it to update/recreate", Globals.PPPNAME));
return;
}
if (pbk.Entries.Contains(Globals.PPPNAME))
{
//MessageBox.Show("DIALER ALREADY Exists!, Updating Credentials Done.",Globals.PPPNAME);
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n","Dialer already Exists!, Saving current Credentials to registry Done.",Globals.PPPNAME, "{0}\r\n\r\n"));
saveCredential(textBox1.Text, textBox2.Text, true, true);
}
else
{
//pbk.Entries.Clear();
rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
rasDialer1.AllowUseStoredCredentials = true;

pbk.Entries.Add(entry);
// If Dialer Create, show successfull message.
MessageBox.Show("Internet Dialer created Successfully.");
saveCredential(textBox1.Text, textBox2.Text, true, true);

}
}
}
private void Form1_Load(object sender, EventArgs e)
{

}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_Click(object sender, EventArgs e)
{
// textBox1.Clear();
}
private void Button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void textBox2_Click(object sender, EventArgs e)
{
//textBox2.Clear();
}

private void pictureBox2_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("https://aacable.wordpress.com");
}
private void button2_Click_1(object sender, EventArgs e)
{
RasHandle handle = null;
using (RasDialer dialer = new RasDialer())
{
dialer.StateChanged += new EventHandler<StateChangedEventArgs>(rasDialer1_StateChanged);
dialer.EntryName = (Globals.PPPNAME);
{
// this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "OK ...", "{0}\r\n\r\n"));
};
//this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Connection in progress ...", "{0}\r\n\r\n"));
dialer.StateChanged += new EventHandler<StateChangedEventArgs>(rasDialer1_StateChanged);
dialer.EntryName = (Globals.PPPNAME);
string username = textBox1.Text;
string passwd = textBox2.Text;
dialer.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
dialer.Timeout = 1000;
dialer.AllowUseStoredCredentials = true;
dialer.EntryName = (Globals.PPPNAME);
rasDialer1.EntryName = (Globals.PPPNAME);
rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
rasDialer1.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);

// If username or password window is empty , post error
if (string.IsNullOrWhiteSpace(textBox1.Text))
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r", "You must enter username/password in order to dial", "{0}\r\n"));
//MessageBox.Show("Enter username.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

// // //
// // // CHECK IF DIAL is press but the pppoe connection is not alreay in network connections, CReate new connection if not created earlier.
string path;
path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
using (RasPhoneBook pbk = new RasPhoneBook())
{
pbk.Open(path);
RasEntry entry = RasEntry.CreateBroadbandEntry(Globals.PPPNAME, RasDevice.GetDeviceByName("PPPOE", RasDeviceType.PPPoE, false));
// Configure any options for your entry here via entry.Options
entry.RedialCount = 99;

//pbk.Entries.Clear();
rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
rasDialer1.AllowUseStoredCredentials = true;

if (pbk.Entries.Contains(Globals.PPPNAME))
{
//MessageBox.Show("DIALER ALREADY Exists!, Updating Credentials Done.",Globals.PPPNAME);
// this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already Exists!", Globals.PPPNAME, "{0}\r\n\r\n"));
//saveCredential(textBox1.Text, textBox2.Text, true, true);
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already connected !"));
}
else

handle = rasDialer1.DialAsync();
}
else
{

pbk.Entries.Add(entry);
// If Dialer Create, show successfull message.
//MessageBox.Show("Internet Dialer created Successfully.");
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "It seems the Dialer App is executed first time therefore we need to create pppoe connection in networkk connections to be used by this DIALER program ...", Globals.PPPNAME, "{0}\r\n\r\n"));
saveCredential(textBox1.Text, textBox2.Text, true, true);
///// SHORTCUT BEGINE

string destDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string destFileName = @"Connect To My Internet Dialer.lnk";

// Create .lnk file
string path2 = System.IO.Path.Combine(destDir, destFileName);
FileStream fs = File.Create(path2);
fs.Close();

// Instantiate a ShellLinkObject that references the .lnk we created
Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder shellFolder = shell.NameSpace(destDir);
Shell32.FolderItem shellFolderItem = shellFolder.Items().Item(destFileName);
Shell32.ShellLinkObject shellLinkObject = (Shell32.ShellLinkObject)shellFolderItem.GetLink;

// Set .lnk properties
shellLinkObject.Arguments = "-d pppoe2";
shellLinkObject.Description = Globals.PPPNAME;
shellLinkObject.Path = @"%windir%\System32\rasphone.exe";
shellLinkObject.WorkingDirectory = "%windir%";

shellLinkObject.Save(path2);
//// SHORTCUT END
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer created successfully, now attempting to connect suing this new pppoe connection !"));
handle = rasDialer1.DialAsync();
}
}
}
}

private void StatusTextBox_TextChanged(object sender, EventArgs e)
{
//
}

private void rasDialer1_StateChanged(object sender, StateChangedEventArgs e)
{
this.Invoke((MethodInvoker)delegate
{
this.StatusTextBox.AppendText(string.Format(e.State.ToString() + "\r\n"));
checkpppstatus();
});
}

private void rasDialer1_DialCompleted(object sender, DialCompletedEventArgs e)
{
{
if (e.Cancelled)
{
MessageBox.Show("Cancelled");
}
else if (e.TimedOut)
{
MessageBox.Show("Time out");
}
else if (e.Error != null)
{
//MessageBox.Show(e.Error.ToString(), "Error");
this.Invoke((MethodInvoker)delegate
{
this.StatusTextBox.AppendText(string.Format(e.Error.ToString() + "\r\n"));
});
if (Globals.RedialCheckValue == "YES")
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Retry Auto Dialing in 1 Second ..."));
rasDialer1.DialAsync();
}
else if (e.Connected)
{
//
this.Invoke((MethodInvoker)delegate
{

//MessageBox.Show("Connection successful zaib!");
var conn = RasConnection.GetActiveConnections().Where(c => c.EntryName == Globals.PPPNAME).FirstOrDefault();
RasIPInfo ipAddresses = (RasIPInfo)conn.GetProjectionInfo(RasProjectionType.IP);
this.StatusTextBox.AppendText(string.Format("{0}\r\n", "Your internet ip is", ipAddresses.IPAddress.ToString()));
this.StatusTextBox.AppendText(string.Format("{0} ", ipAddresses.IPAddress.ToString()));
saveCredential(textBox1.Text, textBox2.Text, true, true);
var local = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.Name == Globals.PPPNAME).FirstOrDefault();
var stringAddress = local.GetIPProperties().UnicastAddresses[0].Address.ToString();
var ipAddress1 = IPAddress.Parse(stringAddress);
//sl2.Text = timeSinceStartTime.ToString();
pppip.Text = ipAddress1.ToString();
//gwLabel.Text = "Gateway is : " + ";
ShowInTaskbar = true;
this.Hide();
InitializeNetworkInterface();
//Displaynotify();
UpdateNetworkInterface();
stopelptimer();
startelptimer();
});
}
}
}

private void dcButton_Click(object sender, EventArgs e)
{
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
//InitializeNetworkInterface();
conn.HangUp();
Globals.dcmanual = "yes";
Globals.RedialCheckValue = "NO";

//MessageBox.Show("Disconnect on User Request");
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "\r\nDisconnected on user request !"));
lblInterfaceType.Text = "---";
lblUpload.Text = "---";
lblDownload.Text = "---";
connstatus.ForeColor = Color.Red;
checkpppstatus();
//this.Hide();
Displaynotifyfordisconnect();

}
else
MessageBox.Show("Dialer is not Active !", Globals.PPPNAME);
}

private void rasDialer1_Error(object sender, System.IO.ErrorEventArgs e)
{
//this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "\r\n AUTO DC DONT KNOW !"));
MessageBox.Show("UNKOWN!!!!!!!!!!!!");
}

private void Form1_Resize(object sender, EventArgs e)
{
notifyIcon1.Text = "My Internet Dialer";
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}

private void notifyIcon1_MouseDoubleClick_1(object sender, MouseEventArgs e)
{
Show();
WindowState = FormWindowState.Normal;
}

private void notifyIcon1_MouseMove(object sender, MouseEventArgs e)
{
notifyIcon1.Text = "Internet Dialer - Broadband PPPoE Dialer V 2.0";
}

private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
{

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{

}

private void notifyIcon1_BalloonTipShown(object sender, EventArgs e)
{
}

private void Form1_Load_1(object sender, EventArgs e)
{
timer4dt.Start();
datelabel.Text = DateTime.Now.ToLongDateString();
timelabel.Text = DateTime.Now.ToLongTimeString();
readCredential();
checkpppstatus();
Timer MyTimer = new Timer();
MyTimer.Interval = 5000;
MyTimer.Tick += new EventHandler(MyTimer_Tick);
MyTimer.Start();
Timer MyTimer10 = new Timer();
MyTimer10.Interval = 5000;
MyTimer10.Tick += new EventHandler(MyTimer_Tick);
MyTimer10.Start();
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already connected !"));
}
private void MyTimer_Tick(object sender, EventArgs e)
{
//checkpppstatus();
}
private void MyTimer10_Tick(object sender, EventArgs e)
{
// // checknetstatus();
}

private void contextMenuStrip1_DoubleClick(object sender, EventArgs e)
{
this.Show();
}

private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
//this.Show();
this.Show();
WindowState = FormWindowState.Normal;
}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void notifyIcon1_Click(object sender, EventArgs e)
{
// this.Show();
//WindowState = FormWindowState.Normal;
}

private void label3_Click(object sender, EventArgs e)
{

}

private void connstatus_Click(object sender, EventArgs e)
{

}

private void connstatus_Click_1(object sender, EventArgs e)
{

}

private void rasDialDialog1_Error(object sender, RasErrorEventArgs e)
{
}

private void rasConnectionWatcher1_Disconnected(object sender, RasConnectionEventArgs e)
{
checkpppstatus();
notifyIcon1.Icon = Resource1.icon_standby;
this.pictureBox2.Image = Resource1.net_disconnected_image_2;
Displaynotifyfordisconnect();
stopelptimer();
//MessageBox.Show(Globals.RedialCheckValue);
if (Globals.dcmanual == "YES")
{
//MessageBox.Show("YES MANUAL DISCONNECTED ...");
return;
}
else
{
}

if (Globals.RedialCheckValue == "YES")
this.Invoke((MethodInvoker)delegate
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Retry Auto Dialing in 1 Seconds!"));
});

DateTime Tthen = DateTime.Now;
do
{

Application.DoEvents();
} while (Tthen.AddSeconds(1) > DateTime.Now);

//Waits 5 seconds.
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already Connected !"));
}
else
{
rasDialer1.EntryName = (Globals.PPPNAME);
rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
rasDialer1.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
var conns2 = RasConnection.GetActiveConnections();
var conn2 = conns2.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (Globals.RedialCheckValue == "YES")
handle = rasDialer1.DialAsync();
}
// this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "NO AUTO DIAL CHECK!"));

}

private void rasConnectionWatcher1_Connected(object sender, RasConnectionEventArgs e)
{
Globals.dcmanual = "no";
UpdateNetworkInterface();
Displaynotify();
//startelptimer();
notifyIcon1.Icon = Resource1.icon_online;
this.pictureBox2.Image = Resource1.net_conn_image_1;
}

private void rasConnectionWatcher1_Error(object sender, ErrorEventArgs e)
{
MessageBox.Show("ERR");
}

private void rasPhoneBookDialog1_ChangedEntry(object sender, RasPhoneBookDialogEventArgs e)
{
MessageBox.Show("ENTRY CHANGED");
}

// Tafreeh start

public bool IsOnline(string website)
{
Ping x = new Ping();
PingReply reply = x.Send(IPAddress.Parse("8.8.8.8")); //enter ip of the machine
if (reply.Status == IPStatus.Success) // here we check for the reply status if it is success it means the host is reachable
{
return true;
// status.Text = "Available. And Round Trip Time of the packet is:" + reply.RoundtripTime.ToString();
}
else //if host is not reachable.
return false;
// status.Text = "Not available";
}
//}

private void AboutMeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("https://aacable.wordpress.com");
}

long lngBytesSend;
long lngBtyesReceived;

private void UpdateNetworkInterface()
{
this.Invoke((MethodInvoker)delegate
{
NetworkInterface nic = nicArr[cmbInterface.SelectedIndex];
IPv4InterfaceStatistics interfaceStats = nic.GetIPv4Statistics();
IPv4InterfaceStatistics status = nic.GetIPv4Statistics();
lblInterfaceType.Text = nic.NetworkInterfaceType.ToString();
int sent_Speed = (int)(status.BytesSent - lngBytesSend) / 1024;
int receive_speed = (int)(status.BytesReceived - lngBtyesReceived) / 1024;
int bytesReceivedSpeed = (int)(interfaceStats.BytesReceived - lngBtyesReceived) / 1024;
int totinmb = (int)(status.BytesReceived) / 1024 / 1024;
lblDownload.Text = totinmb + " MB";
int totSentinmb = (int)(status.BytesSent) / 1024 / 1024;
lblUpload.Text = totSentinmb + " MB";
lngBytesSend = status.BytesSent;
lngBtyesReceived = status.BytesReceived;
});
}

void timer_Tick(object sender, EventArgs e)
{
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
UpdateNetworkInterface();
InitializeNetworkInterface();
}

private void cmbInterface_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void dialerCheck_Click(object sender, EventArgs e)
{
//Gateway IP
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters)
{
IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
GatewayIPAddressInformationCollection addresses =
adapterProperties.GatewayAddresses;
if (addresses.Count > 0)
{
foreach (GatewayIPAddressInformation address in addresses)
{
StatusTextBox.Text += "Gateway Address | " +
address.Address.ToString() + "\r\n";

}
}
}
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
// timer.Dispose();
// this.Dispose();
}

private void timer4dt_Tick(object sender, EventArgs e)
{
timelabel.Text = DateTime.Now.ToLongTimeString();
timer4dt.Start();
}

private void resetStats_Click(object sender, EventArgs e)
{

_timer.Stop();
_timerRunning = false;

// Reset the elapsed time TimeSpan objects
_totalElapsedTime = TimeSpan.Zero;
_currentElapsedTime = TimeSpan.Zero;
}

private void timerStart_Click_1(object sender, EventArgs e)
{
// If the timer isn't already running
if (!_timerRunning)
{
// Set the start time to Now
_startTime = DateTime.Now;

// Store the total elapsed time so far

_totalElapsedTime = _currentElapsedTime;

_timer.Start();
_timerRunning = true;
}
else // If the timer is already running
{
_startTime = DateTime.Now;

// Store the total elapsed time so far

_totalElapsedTime = _currentElapsedTime;

_timer.Start();
_timerRunning = true;
}
}

private void timerdialer_Tick_1(object sender, EventArgs e)
{
{
var timeSinceStartTime = DateTime.Now - _startTime;
timeSinceStartTime = new TimeSpan(timeSinceStartTime.Hours,
timeSinceStartTime.Minutes,
timeSinceStartTime.Seconds);
_currentElapsedTime = timeSinceStartTime + _totalElapsedTime;
}
}

private void timerStop_Click(object sender, EventArgs e)
{
_timer.Stop();
_timerRunning = false;
}

// tafreh2 start
protected void checknetstatusBoxMsg()
{
if (IsOnline(textBox1.Text) == true)
{
//internetStatusLabel.ForeColor = System.Drawing.Color.Green;
string Status = "Connected";
// internetStatus.Text = Status;
this.StatusTextBox.AppendText(string.Format("{0}\r\n", Status));
}
else
{
// internetStatusLabel.ForeColor = System.Drawing.Color.Red;
string Status = "Disconnected";
this.StatusTextBox.AppendText(string.Format("{0}\r\n ", Status, "{0}\r\n\r\n"));
}
}

protected void checkpppstatusBoxMsg()
{
this.Invoke((MethodInvoker)delegate
{
var conns = RasConnection.GetActiveConnections();
var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME);
if (conn != null)
{
string Status = "PPP Dialer Stauts: Connected";
this.StatusTextBox.AppendText(string.Format("{0}\r\n", Status));
}
else
{
string Status = "PPP Dialer Stauts: Disconnected";
this.StatusTextBox.AppendText(string.Format("{0}\r\n", Status));
}

});
}

// tafreh2 end

private void netStatusButton_Click(object sender, EventArgs e)
{
checknetstatusBoxMsg();
}

private void dialerLanStatus_Click(object sender, EventArgs e)
{
checkpppstatusBoxMsg();
}

private void gatewayDetails_Click(object sender, EventArgs e)
{
//Gateway IP
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
this.StatusTextBox.AppendText(string.Format("{0}\r\n", "Gateway Details!"));
foreach (NetworkInterface adapter in adapters)
{
IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
GatewayIPAddressInformationCollection addresses =
adapterProperties.GatewayAddresses;
if (addresses.Count > 0)
{
foreach (GatewayIPAddressInformation address in addresses)
{
this.StatusTextBox.AppendText(string.Format(address.Address.ToString() + "\r\n"));
}
}
}
}

private void StatusTextBox_VisibleChanged(object sender, EventArgs e)
{
StatusTextBox.SelectionStart = textBox1.Text.Length;
StatusTextBox.ScrollToCaret();
}

private void label5_Click(object sender, EventArgs e)
{

}

private static void ShowNetworkTraffic()
{
PerformanceCounterCategory performanceCounterCategory = new PerformanceCounterCategory("Network Interface");
string instance = performanceCounterCategory.GetInstanceNames()[0]; // 1st NIC !
PerformanceCounter performanceCounterSent = new PerformanceCounter("Network Interface", "Bytes Sent/sec", instance);
PerformanceCounter performanceCounterReceived = new PerformanceCounter("Network Interface", "Bytes Received/sec", instance);

for (int i = 0; i < 10; i++)
{
Console.WriteLine("bytes sent: {0}k\tbytes received: {1}k", performanceCounterSent.NextValue() / 1024, performanceCounterReceived.NextValue() / 1024);
}
}

// tafreeh starts
private static void RedialAttempt()
{

}

private void pictureBox1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("https://aacable.wordpress.com");
}

private void AboutMeLabel_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("https://aacable.wordpress.com");
}

private void RedialCheckBox_CheckedChanged(object sender, EventArgs e)
{
if (RedialCheckBox.Checked)
{
//this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will auto Redial if get disconnected."));
Globals.RedialCheckValue = "YES";
RegistryKey hkcu = Registry.CurrentUser;
RegistryKey software = hkcu.OpenSubKey("Software", true);
RegistryKey zaib = software.CreateSubKey("zaib");
zaib.SetValue("autoredial", "YES", RegistryValueKind.String);
zaib.Close();
}
}

private void testb_Click(object sender, EventArgs e)
{
MessageBox.Show(Globals.RedialCheckValue);
}

private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
this.Show();
WindowState = FormWindowState.Normal;
}

private void RedialCheckBox_CheckStateChanged(object sender, EventArgs e)
{
if (RedialCheckBox.Checked)
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will auto Redial if get disconnected."));
Globals.RedialCheckValue = "YES";
RegistryKey hkcu = Registry.CurrentUser;
RegistryKey software = hkcu.OpenSubKey("Software", true);
RegistryKey zaib = software.CreateSubKey("zaib");
zaib.SetValue("autoredial", "YES", RegistryValueKind.String);
zaib.Close();
}
else
{
this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will NOT auto Redial if get disconnected."));
RegistryKey hkcu = Registry.CurrentUser;
RegistryKey software = hkcu.OpenSubKey("Software", true);
RegistryKey zaib = software.CreateSubKey("zaib");
zaib.SetValue("autoredial", "NO", RegistryValueKind.String);
zaib.Close();
}
}

private void AboutMeButton_Click(object sender, EventArgs e)
{
AboutBox1 box = new AboutBox1();
box.ShowDialog();
}

// tafreeh ends

}
}
// The CODE ends Here.
// Any suggestions / modifications are most welcome.
// zaib

i HAVE UPLOADED THE TEST PACKAGE HERE.

https://drive.google.com/open?id=0B8B_P2ljEc2xaGU1MHhsNktsdjg

I am pretty sure that above code will help you in many parts when you will create your own project. I faced many challenges duet first time programming but your situation may be different if you have already working example in ahead of you 🙂

I will be more then happy if someone posts some more advance level of this dialer code for all.


Regard’s

Syed Jahanzaib
https://aacable.wordpress.com
Email: aacable@hotmail.com
Allah Hafiz !

%d bloggers like this: