Syed Jahanzaib Personal Blog to Share Knowledge !

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 !

March 8, 2017

MS Project 2016 has stopped working on assign resources

Filed under: Microsoft Related — Tags: , , — Syed Jahanzaib / Pinochio~:) @ 9:49 AM

microsoft-project-2016-license-key-e1469786312356

Recently we purchased Microsoft Project 2016 licenses for our users. In terms of Functionality – All seems to be working fine except assigning resources

Whenever user tried to assign resources using option `Assign Resources` , project crashed/stopped working with below error …

ms_project_2017_stopped_wroking

 

After little R&D, we found that this is a standard bug in MS Project 2016 and it was fixed with Patch released on February 9, 2016

February 9, 2016, update for Project 2016 (KB3114714)

After updating patch, all went fine.


Advise of the day ! (Golden Rule)

Although we have WSUS (Windows Update Servers) in our organization which regularly update the clients windows , but general patches for MS OFFICE was not selected in the checklist, & that’s the main reason why we had to face this issue. Always keep your Windows and other softwares UP TO DATE. It will keep you away from UNWANTED guests 😉 You know what I mean 🙂

Regard’s
Syed Jahanzaib

March 3, 2017

Cisco Access Point Short Notes !

Filed under: Cisco Related — Tags: , , , — Syed Jahanzaib / Pinochio~:) @ 4:58 PM

2017-03-03 16.47.48.jpg

 

Last year we replaced our old Cisco Aironet Access Points series with the new Ubiquiti AP-LR/AC model. Old switches were then placed in inventory to be used as a backup. Since these cisco AP were configured 8-10 years ago, therefore I had to reset all of them. I made short notes for the process, just in case I need it again in future or maybe useful for anyone else needing similar.

Syed.Jahanzaib


1- Cisco Aironet AP Reset to Factory Default

Note: I used Cisco Aironet AIR-AP1242AG-E-K9 access point model in this post

  1. Connect Console cable from the AP Console port to your PC COM port.
  2. Open Hyper Terminal and use below mentioned settings
    9600 baud
    8 data bits
    None parity
    1 stop bit
    Xon/Xoff Flow control .If xon/xoff flow control does not work, use no flow control.
  3. Disconnect power from access point
  4. Press and hold the MODE button while you reconnect power to the access point.
  5. Hold the MODE button until the Status LED turns amber (generally for 2-3 seconds max), and release the button
  6. After the AP reboots, it will come to default settings & you can re-configure the access point by using CLI or GUI. Default IP is 10.0.0.1

  7. The default username and password is cisco/Cisco [ 'C'  is capital in password]

As shown below ….


Press RETURN to get started.

Xmodem file system is available.
flashfs[0]: 158 files, 7 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 15998976
flashfs[0]: Bytes used: 8549888
flashfs[0]: Bytes available: 7449088
flashfs[0]: flashfs fsck took 33 seconds.
Base ethernet MAC Address: 00:1e:be:25:68:d0
Initializing ethernet port 0...
Reset ethernet port 0...
Reset done!
ethernet link up, 100 mbps, full-duplex
Ethernet port 0 initialized: link is up
button pressed for 6 seconds
process_config_recovery: set IP address and config to default 10.0.0.1
Loading "flash:/c1240-k9w7-mx.124-10b.JA/c1240-k9w7-mx.124-10b.JA"...###########
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
######################################################

File "flash:/c1240-k9w7-mx.124-10b.JA/c1240-k9w7-mx.124-10b.JA" uncompressed and
installed, entry point: 0x3000
executing...

Restricted Rights Legend

Use, duplication, or disclosure by the Government is
subject to restrictions as set forth in subparagraph
(c) of the Commercial Computer Software - Restricted
Rights clause at FAR sec. 52.227-19 and subparagraph
(c) (1) (ii) of the Rights in Technical Data and Computer
Software clause at DFARS sec. 252.227-7013.

cisco Systems, Inc.
170 West Tasman Drive
San Jose, California 95134-1706

Cisco IOS Software, C1240 Software (C1240-K9W7-M), Version 12.4(10b)JA, RELEASE
SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2007 by Cisco Systems, Inc.
Compiled Wed 24-Oct-07 15:31 by prod_rel_team
Image text-base: 0x00003000, data-base: 0x00859060

Initializing flashfs...

flashfs[1]: 157 files, 7 directories
flashfs[1]: 0 orphaned files, 0 orphaned directories
flashfs[1]: Total bytes: 15998976
flashfs[1]: Bytes used: 8548352
flashfs[1]: Bytes available: 7450624
flashfs[1]: flashfs fsck took 4 seconds.
flashfs[1]: Initialization complete....done Initializing flashfs.
Radio 1 A506 7100 E8000000 A0000000 80000000 3
Radio 1 A506 6700 E8000100 A0040000 80010000 2

This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.

A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
export@cisco.com.

cisco AIR-AP1242AG-E-K9 (PowerPCElvis) processor (revision A0) with 24566K/81
92K bytes of memory.
Processor board ID FCZ1213815G
PowerPCElvis CPU at 262Mhz, revision number 0x0950
Last reset from power-on
1 FastEthernet interface
2 802.11 Radio(s)

32K bytes of flash-simulated non-volatile configuration memory.
Base ethernet MAC Address: 00:1E:xx:xx:xx:xx
Part Number : 73-10256-06
PCA Assembly Number : 800-xxxxx-05
PCA Revision Number : A0
PCB Serial Number : FOCxxxxNE3
Top Assembly Part Number : 800-xxxx-01
Top Assembly Serial Number : FCZxxxxxxG
Top Revision Number : A0
Product/Model Number : AIR-AP1242AG-E-K9

Press RETURN to get started!


IP Related Configuration …

>

To configure new ip address


en
configure t
ip address 10.0.0.1 255.0.0.0
no ip route-cache

Now open browser and point to the ip you configured above, & do reset of config using express setup or as required 🙂

cisco aironet eexpres setup zaib.PNG


Howto ADD SSID

cisco-aironet-ssid-after-reset


Howto ENABLE RADIO / WiFi 

cisco-aironet-howto-enable-radio

Note: Enable Both Radio using above step …


To show current IP,

en
show ip interface brief

To Save Config

en
wr

 

Regard’s
Jz!

March 2, 2017

RM Reseller Monthly Report via GMAiL

Filed under: Radius Manager — Tags: , , — Syed Jahanzaib / Pinochio~:) @ 11:07 AM

hosting-by-the-hour

Disclaimer: This is not a reliable method for some OP to acquire the monthly sale report done by reseller. It requires some criteria to match like strict account creation by specific reseller id only. Better to use provided GUI in DMA_RM to inquire the proper report.

This is just a personal way of collecting reporting via automated email which MUST be cross verified by the OP .

Z@iB


BASH:

Following is a bash script which will simply query invoices, categorize it according to reseller account, format it using html coding, sort, total and send email admin.

Logic:

When you will execute this script, it will fetch the reports from rm_users database using last month dates, it will auto calculate last month dates.

Example:

Current month is March,2017. the script will pick Last Month which was February,2017 and will calculate number of days as well using CAL function.

Sample of Report is as follows.

 

1

RM Reseller Monthly Report via email

2

RM Reseller Monthly Report via email

Schelde following script via crontab @monthly. Modify information as per your local network.



#!/bin/bash
# Script to query INVOICES section of Radius manager mysql, and
# categorize it according to resellers , calculate accounts,sort and total it.
# These are my personal way of doing things, and no one is bound to agree with these.
# Created: Year 2014
# set -x
# MYSQL USER ID PASSWORD
SQLUSER="root"
SQLPASS="YOUR_MYSQL_PASSWORD"

# DATE RELATED STUFF
LASTMY=`date +'%Y-%m' -d 'last month'`
LAST_MONTH_DIGIT=`date +'%m' -d 'last month'`
YEAR_DIGIT=`date +'%Y' -d 'last month'`
LAST_MONTH_LAST_DATE=`cal $LAST_MONTH_DIGIT $YEAR_DIGIT |egrep -v [a-z] |wc -w`
START="$LASTMY-01"
END="$LASTMY-$LAST_MONTH_LAST_DATE"
FMONTH=`date +'%B-%Y' -d 'last month'`
DATE=`date`

# EMAIL RELATED STUFF
TO1="YOUR_EMAIL_ID@hotmail.com"
GMAILID="GMAIL_ID_TO_SEND_EMAIL_FROM@gmail.com"
GMAILPASS="GMAIL_PASSWORD"
CONTENT_TYPE="text/html"

# LOG FILES
FILE="/tmp/dealer_renewal_month.html"
FINALFILE="/tmp/dealer_renewal_month_final.html"
COMPANY="ZAIB(Pvt)_Ltd.
This System is powered by Syed_Jahanzaib aacable@hotmail.com"
BODY_TITLE="Report&nbsp;For&nbsp;Dealer&nbsp;Account&nbsp;asof&nbsp;$FMONTH"
> $FILE
> $FINALFILE

# HTML BODY
echo "
<pre>" > $FILE
echo "<b>$BODY_TITLE</b>" >> $FILE
echo "<b>DEALER User's_Activated Used_Amount Balance</b>
" >> $FILE

# QUERY MANAGERS FROM RM_MANAGERS TABLE
mysql -u$SQLUSER -p$SQLPASS --skip-column-names -e "use radius; select managername from rm_managers;" | while read dealer
do
num=$[$num+1]
DEALER=`echo $dealer | awk '{print $1}'`

# GATHER DATA OF ACTIVE USERS, USED AMOUNT, CURRENT BALANCE, (MOBILE NUMBER IF SMS IS REQUIRED TO SEND)
ACTIVEUSERSNO=`mysql -uroot -p$PASS --skip-column-names -e "use radius; SELECT price FROM rm_invoices LEFT JOIN rm_users ON rm_users.username = rm_invoices.username WHERE date >= '$START' AND date <= '$END' AND (paymode = '0' OR paymode = '1' OR paymode = '2' OR paymode = '3' OR paymode = '4' OR paymode = '5' OR paymode = '6' OR paymode = '7' OR paymode = '8' OR paymode = '9' OR paymode = '10' OR paymode = '11' ) AND (invgroup = '0' ) AND invnum != '' AND rm_users.owner = '$DEALER';" | sed '/credited/d' | wc -l`
USEDAMOUNT=`mysql -uroot -p$PASS --skip-column-names -e "use radius; SELECT price FROM rm_invoices LEFT JOIN rm_users ON rm_users.username = rm_invoices.username WHERE date >= '$START' AND date <= '$END' AND (paymode = '0' OR paymode = '1' OR paymode = '2' OR paymode = '3' OR paymode = '4' OR paymode = '5' OR paymode = '6' OR paymode = '7' OR paymode = '8' OR paymode = '9' OR paymode = '10' OR paymode = '11' ) AND (invgroup = '0' ) AND invnum != '' AND rm_users.owner = '$DEALER';" | sed '/credited/d' | awk '{ sum+=$1} END {print sum}'`
BALANCE=`mysql -u$SQLUSER -p$SQLPASS --skip-column-names -e "use radius; select balance from rm_managers WHERE managername = '$DEALER';" |cut -f1 -d"."`
MOBILE=`mysql -u$SQLUSER -p$SQLPASS --skip-column-names -e "use radius; select mobile from rm_managers WHERE managername = '$DEALER';"`
SRV=`mysql -uroot -p$SQLPASS --skip-column-names -e "use radius; SELECT SQL_CALC_FOUND_ROWS rm_invoices.service FROM rm_invoices LEFT JOIN rm_users ON rm_users.username = rm_invoices.username WHERE date >= '$START' AND date <= '$END' AND (paymode = '0' OR paymode = '2' ) AND (invgroup = '0' OR invgroup = '1' ) AND invnum != '' AND rm_users.owner = '$DEALER' ORDER BY id LIMIT 0, 10000;" | sed '/credited/d' | awk '{print $1}' | sort | uniq -c`

#LOOK FOR ZERO VALUE AMOUNT AND REPLACE IT WITH 0 , IF FOUND
#if [ ! -n "$USEDAMOUNT" ]; then
#if [ "USEDAMOUNT == "" ]; then
#USEDAMOUNT="X"

# PRINT ALL GATHERED DATA INTO FILE
#echo "<b>$DEALER</b> $ACTIVEUSERSNO $USEDAMOUNT - $BALANCE
#------------------------------------------------------------------------" >> $FILE
#else

# PRINT ALL GATHERED DATA INTO FILE
echo "<b>$DEALER</b> $ACTIVEUSERSNO $USEDAMOUNT - $BALANCE

Details&nbsp;of&nbsp;Services&nbsp;Activated:
Qty Service&nbsp;Name

$SRV

------------------------------------------------------------------------" >> $FILE

#fi
done

# MAKE COLUMNS SO THAT IT GETs EASIER TO READS
sed -e 's/\t//g' $FILE | column -t | sed 's/ //g' | sed 's/ User/User/g' > $FINALFILE
# GATHER DATA OF ACTIVE USERS, USED AMOUNT, CURRENT BALANCE, (MOBILE NUMBER IF SMS IS REQUIRED TO SEND)
TOTNO=`mysql -uroot -p$PASS --skip-column-names -e "use radius; SELECT price FROM rm_invoices LEFT JOIN rm_users ON rm_users.username = rm_invoices.username WHERE date >= '$START' AND date <= '$END' AND (paymode = '0' OR paymode = '1' OR paymode = '2' OR paymode = '3' OR paymode = '4' OR paymode = '5' OR paymode = '6' OR paymode = '7' OR paymode = '8' OR paymode = '9' OR paymode = '10' OR paymode = '11' ) AND (invgroup = '0' ) AND invnum != '';" | sed '/credited/d' | wc -l`
SALES=`mysql -uroot -p$PASS --skip-column-names -e "use radius; SELECT price FROM rm_invoices LEFT JOIN rm_users ON rm_users.username = rm_invoices.username WHERE date >= '$START' AND date <= '$END' AND (paymode = '0' OR paymode = '1' OR paymode = '2' OR paymode = '3' OR paymode = '4' OR paymode = '5' OR paymode = '6' OR paymode = '7' OR paymode = '8' OR paymode = '9' OR paymode = '10' OR paymode = '11' ) AND (invgroup = '0' ) AND invnum != '';" | sed '/credited/d' | paste -sd+ | bc | cut -f1 -d"."`

echo "Total Users Activated/Renewed in $FMONTH = <b>$TOTNO</b>" >> $FINALFILE
echo "Total SALES Done in $FMONTH = <b>$SALES</b>" >> $FINALFILE
echo "
<b>$COMPANY</b>" >> $FINALFILE
echo "Generated on $DATE" >> $FINALFILE
echo "</pre>
" >> $FINALFILE

##Finally send email with all the data gathered USING SEND_EMAIL TOOL
/temp/sendEmail-v1.56/sendEmail -t $TO1 -u "INFO: GT DEALERS MONTHLY BILLING INFO for $FMONTH" -o tls=yes -s smtp.gmail.com:587 -xu $GMAILID -xp $GMAILPASS -f $GMAILID -o message-file=$FINALFILE -o message-content-type=$CONTENT_TYPE
# Type file for view
cat $FINALFILE

 

%d bloggers like this: