Question

Howto: Capture data stream with telnet session on Linux Server

Asked by: shaunwingin

Say, what telnet application on linux system (not running GUI) listening to a specific port can do following:

Quintum device sends CDR records via port: It requires a CHR Line feed to tell start sending its buffer.
The data is to be written to a file. Or even better still to a database in PostGreSQL.

any ideas please?

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-03-31 at 01:34:55ID24280215
Topics

Linux Programming

,

Linux Administration

,

SSH / Telnet Software

,

Linux

Participating Experts
3
Points
500
Comments
31

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. ftpd and telnet
    i can't seem to ftp or telnet to my linux box on my LAN. I am a new user to linx so i just need to find a nice HOWTO for these questions
  2. Telnet -Howto?
    How would I go about grabbing a port and listening for messages? Bassically I want to create a simple Telnet app, but I've only had experience with socket controls with Java. I'm using VC++ 6.0 (On a side not, anyone know of any good freeware C++ compilers for Win32 other tha...
  3. Mud/Telnet Client
    Hello, I am building a MUD/Telnet client, the deal is the 'screen' is a RTB. And when i receive any data from the MUD/Telnet server, I gets lots of little squares after the text in my RTB. Here's the code:Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam...
  4. Telnet
    What is the default Telnet port?
  5. VB.NET TELNET
    Has anyone come across a TELNET class for VB.NET? I have my FTP portion working but I need to execute a script on a Unix machine and the only way I know how to do this is through a TELNET prompt. I am basically sending 3 files through FTP, on of which is a Script that i nee...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: arnoldPosted on 2009-04-02 at 15:04:52ID: 24055083

You can use Socket in perl, C to effectively programatically handle the establishment of the connection and exchange data as you see fit.
You could look into using expect.

 

by: UberpappaPosted on 2009-04-02 at 15:05:47ID: 24055092

Hi,

Netcat can do it. Do I understand correctly, you want to connect to the quintum device on a port, and then send a CR, and record everything that is replied back into a file? If so:

echo | netcat host port > /tmp/file

E.g. if the host is 192.168.1.1 and it listens on 12345

echo | netcat 192.168.1.1 12345 > /tmp/file

Will record what it sends back to /tmp/file



 

by: shaunwinginPosted on 2009-04-03 at 02:18:08ID: 24058003

Uberpappa, our description is 100% corrrect. How will netcat send a CR to the Quitnum to tell it to start sending?

 

by: UberpappaPosted on 2009-04-03 at 04:19:51ID: 24058560

THe command says:

echo | netcat host port > /tmp/file

Broken down:

echo

Which prints a CR

echo | netcat host port

Send the output of echo (CR) to netcat to forward to the remote host

echo | netcat host port > /tmp/file

and send whatever is returned to a file

 

by: shaunwinginPosted on 2009-04-03 at 04:41:10ID: 24058692

tx - will try it. Is there any way to write the file into a database? The columns are fixed width.

 

by: UberpappaPosted on 2009-04-03 at 04:45:13ID: 24058734

Yes, it shouldn't be too difficult to do something like:

echo | netcat host port | populatedb.sh

Can you post a snippet of the file, so we can get a better understanding of what it contains?

 

by: UberpappaPosted on 2009-04-03 at 05:14:18ID: 24058967

Also, does it have to be PostgreSQL, or will MySQL also do?

 

by: shaunwinginPosted on 2009-04-03 at 05:21:10ID: 24059028

It has to be PostgreSQL - I'm afraid... Can it be done?

 

by: UberpappaPosted on 2009-04-03 at 05:21:56ID: 24059034

It can, just a longer process... give me a sec and I'll post an example script...

 

by: shaunwinginPosted on 2009-04-03 at 05:42:47ID: 24059191

How can I see if its listening.... Also the data is sent to a specific public ip address  - but comes from a dynamic ip address - both are public. How can I run nc to listen on the public ip address for all data that comes in on the port?

 

by: UberpappaPosted on 2009-04-03 at 05:45:36ID: 24059218

Create a database, and create a table with all the fields you require in the database:

CREATE TABLE quintum (
   Field1 CHAR(5),
   FIeld2 CHAR(10),
   Field3 CHAT(2)
);

As an example. The fields should correspond with your fixed width data.

Then, export to a file:

echo |netcat host port > /tmp/rawdata.txt

Inside the database, run the following script to create a temporary table and import the bulk text (not split into fields) in it:

CREATE TABLE temp_table (Line VARCHAR(200));

where 200 is large enough to contain the data from one line of the input. Then import the text file into it:

COPY temp_table (line) from '/tmp/rawdata.txt';

Now Split it into fields from the temp table to the new table:

INSERT INTO quintum SELECT SUBSTRING(Line FROM 1 FOR 5), SUBSTRING(Line FROM 6 FOR 10), SUBSTRING(Line FROM 17 FOR 2) from temp_table.

Then drop the temp table:

DROP TABLE temp_table;

The SUBSTRING statements are used to split the text into fields based on their fixed-widht placement.

Once you have the queries working, put them all into a .sql file, one after the other, then do:

echo | netcat host port > /tmp/rawdata.txt
psql database < /path/to/your/script.sql

And you're set to go.

 

by: shaunwinginPosted on 2009-04-03 at 05:48:22ID: 24059243

Wow this looks a G8 script tx!

 

by: shaunwinginPosted on 2009-04-03 at 05:49:11ID: 24059247

The file is created but no data is written...

 

by: UberpappaPosted on 2009-04-03 at 05:50:52ID: 24059262

Oh, that changes things a bit! :)

On the listening host, run:

netcat -l -p 12345 > /tmp/file

It will then record everything that is sent to port 12345 of that host to the file /tmp/file.

 

by: UberpappaPosted on 2009-04-03 at 05:53:14ID: 24059281

Let me just make sure that I have this correct now:

Your quintum box (lets call it quintum.yourdomain.com listens on a port for a CR. Once it receives it, it opens a new connection to another host, call it otherhost.yourdomain.com which is supposed to be listening on a port for the result?

 

by: shaunwinginPosted on 2009-04-03 at 06:01:11ID: 24059351

 -l      Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote host.  It is an
             error to use this option in conjunction with the -p, -s, or -z options.  Additionally, any timeouts specified with the -w option
             are ignored.

 

by: shaunwinginPosted on 2009-04-03 at 06:05:35ID: 24059398

I tried:
netcat -l -p 9002 but returned an error....
Please see page 4 of attached file for process that Quintum uses. I've left password blank.

 

by: arnoldPosted on 2009-04-03 at 06:22:28ID: 24059568

echo sends a lf/cr not just a cr.
try this modification to Uberpappa's info:
perl -e ' print  scalar chr(13);' | netcat 192.168.1.1 12345 > /tmp/file

 

by: UberpappaPosted on 2009-04-03 at 06:50:25ID: 24059898

Thanks Arnold, forgot about that.

After viewing that doc, the whole world around this question has changed. As I understand, the client connects, the server provides a welcome message, and asks for a password, the client supplies the password, the client supplies it, and then its IP and unit name and the server then responds with a CSV file, not a fixed widht file.

So back to the drawing board, this screams netcat with expect, or as suggested initially arnold, a perl/C script.

It does make the database import a lot easier though.

Let me try and dish up something with netcat and expect quickly.

 

by: UberpappaPosted on 2009-04-03 at 07:02:30ID: 24060049

On second thought, it should be OK if we just send the password and other info sequentially:

#!/bin/bash
 
# CHANGE FROM HERE:
 
remoreserver="192.168.1.1"
remoteport=9002
rawdatafile=/tmp/rawdata.csv
tenorip="192.168.2.1"
tenorunit="tenor1"
password="secret"
 
# TO HERE
 
(
  echo "${password}"
  echo "${tenorip},${tenorunit}"
) | netcat remoteserver remoteport > ${rawdatafile}
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

Select allOpen in new window

 

by: UberpappaPosted on 2009-04-03 at 07:03:47ID: 24060059

Typo:

#!/bin/bash
 
# CHANGE FROM HERE:
 
remoteserver="192.168.1.1"
remoteport=9002
rawdatafile=/tmp/rawdata.csv
tenorip="192.168.2.1"
tenorunit="tenor1"
password="secret"
 
# TO HERE
 
(
  echo "${password}"
  echo "${tenorip},${tenorunit}"
) | netcat ${remoteserver} ${remoteport} > ${rawdatafile}

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

Select allOpen in new window

 

by: arnoldPosted on 2009-04-03 at 07:30:56ID: 24060316

http://perldoc.perl.org/perlipc.html#Sockets%3a-Client%2fServer-Communication

Using a perl script to connect and get the data will also make the option of having everything done within a single process available.

The link above provides different examples of using socket to establish a single connection or a pair of connection.

Give it a try, you will likely find other uses for the knowledge you get.

There is a Telnet module, Net::Telnet that you could use as well if you do not want to get into Socket setup etc.

 

by: shaunwinginPosted on 2009-04-04 at 13:26:19ID: 24068876

tx Uberppa and Arnold. Uberppa, I'm not receiving data in the file. I ran tcpdump -i eth0:1 port 9002 -w isca
and getting a packet from the Quintum. Any ideas please? Perhaps you can setup a test on your side and see - I can put in your ip into the Quintum. Tx for teh great input.

 

by: UberpappaPosted on 2009-04-04 at 14:27:08ID: 24069093

we can try... mail me at uberpappa123 at gmail dot com

 

by: ahoffmannPosted on 2009-04-05 at 10:35:34ID: 24072220

how about using an expect script to send and receive the data from you special port, then simply call this script inside a `script' shell, see
  man script

 

by: UberpappaPosted on 2009-04-05 at 16:39:31ID: 24073469

As discussed on msn, I've written a script in php that will:

1) Telnet to a remote Server, and authenticate with the given password
2) Parse the Tenor name passed by the server
3) Check the last CDR that was received for this server, and send it to server to instruct it to only send from that CDR onwards
3) Read the CDR's that are returned, and log them into Postgres.

To make it work:

1) Create a database in postgres
2) Create a user and configure the permissions on the db as well as in pg_hba.conf so that the user can create records in the db.
3) Run the create.sql script against the db to create the table. (psql dbname < create.sql)
4) Change the first line in the importcdr script, which reads #!/usr/bin/php to point to wherever your php is on the server. You can check this with "which php".

Then run it as follows:

./importcdr serverip serverport <password>

If no password is configure, ommit it from the command. The port is 9003 and the serverip is the one you gave me on msn.

Hope it works! Let me know if anything on your side causes problems. This side its working 100%.

Scripts to follow......

 

by: UberpappaPosted on 2009-04-05 at 16:40:11ID: 24073475

The sql create script: create.sql

CREATE TABLE cdr (
	ip VARCHAR(20),
	tenor VARCHAR(50),
	seq INTEGER,
	called_number VARCHAR(50),
	duration_in_seconds INTEGER,
	time_initiated VARCHAR(20),
	time_connected VARCHAR(20),
	time_disconnected VARCHAR(20),
	disconnect_cause INTEGER,
	local_ip VARCHAR(20),
	remote_ip VARCHAR(20),
	originating_trunk_id VARCHAR(20),
	call_type INTEGER,
	call_number_type INTEGER,
	incoming_line INTEGER,
	incoming_channel INTEGER,
	outgoing_line INTEGER,
	outgoing_channel INTEGER,
	auto_switch_time VARCHAR(20),
	auto_switch_duration VARCHAR(20),
	bad_quality_events INTEGER,
	auto_switching_flag INTEGER,
	PRIMARY KEY (ip,tenor,seq,time_initiated)
);
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

Select allOpen in new window

 

by: UberpappaPosted on 2009-04-05 at 16:41:23ID: 24073479

And the imprortcdr script

#!/usr/bin/php -q
<?php
	//-----------------------------------------------
	// DB CONFIGURATION
	//-----------------------------------------------
	define("DB_HOST","localhost");
	define("DB_DATABASE","somedatabase");
	define("DB_USER","someuser");
	define("DB_PWD","secret");
 
	//-----------------------------------------------
	// Connect to the DB
	//-----------------------------------------------
	$dbconn = pg_connect(
			" host="     .DB_HOST.
			" dbname="  .DB_DATABASE.
			" user="    .DB_USER.
			" password=".DB_PWD 
		);
 
	if (!$dbconn) {
		die('Unable to connect to DB: '.pg_last_error());
	}
 
	//-----------------------------------------------
	// print_usage ()
	//-----------------------------------------------
	// Print the script usage
	//-----------------------------------------------
	function print_usage () {
		echo "Usage: $argv[0] host port <password>\n";
	}
 
	//-----------------------------------------------
	// strip_crlf ()
	//-----------------------------------------------
	// Strip a string of CR and LF characters
	//-----------------------------------------------
	function strip_crlf ($line) {
		return str_replace("\r","",str_replace("\n","",$line));
	}
 
	//-----------------------------------------------
	// process_line ()
	//-----------------------------------------------
	// Insert a CDR line into the database
	//-----------------------------------------------
	function process_line($ip,$tenor,$line) {
		global $dbconn;
		$row=array();
		// Split the CSV line into db fields
		list(	
			$row["seq"],
			$row["called_number"],
			$row["duration_in_seconds"],
			$row["time_initiated"],
			$row["time_connected"],
			$row["time_disconnected"],
			$row["disconnect_cause"],
			$row["local_ip"],
			$row["remote_ip"],
			$row["originating_trunk_id"],
			$row["call_type"],
			$row["call_number_type"],
			$row["incoming_line"],
			$row["incoming_channel"],
			$row["outgoing_line"],
			$row["outgoing_channel"],
			$row["auto_switch_time"],
			$row["auto_switch_duration"],
			$row["bad_quality_events"],
			$row["auto_switching_flag"]
		) = split(",",strip_crlf($line));
 
		// And add the two thats not in there
                $row["ip"] = $ip;
                $row["tenor"] = $tenor;
 
		// Check to see if record already in DB:
		$query  = "SELECT COUNT(seq) FROM cdr WHERE ";
		$query .= "ip = '".$row["ip"]."' and ";
		$query .= "tenor = '".$row["tenor"]."' and ";
		$query .= "seq = ".$row["seq"]." and ";
		$query .= "time_initiated = '".$row["time_initiated"]."'";
		$qres   = pg_query($dbconn,$query);
		if ($qres) {
			$exists = pg_fetch_row($qres);
			// If at least one record exist
			if ($exists[0] > 0) {
				echo "Skipping seq ".$row["seq"]." already imported.\n";
			} else {
				// Insert it
				$res = pg_insert($dbconn,'cdr',$row);
				if (!res) {
					echo "Seq ".$row["seq"].": INSERTION FAILED.\n";
				} else {
					echo "Seq ".$row["seq"]." inserted.\n";
				}
			}
		} else {
			echo "Failing to query database for existing records!\n";
		}
	}
 
	//-----------------------------------------------
	// MAIN EXECUTION SECTION
	//-----------------------------------------------
 
	// Check arguments
	if ($argc < 3) {
	  print_usage();
	  exit;
	}
	$host=$argv[1];
	$port=$argv[2];
	if ($argc = 4) {
		$password=$argv[3];
	} else {
		$password="";
	}
 
	// Execute the telnet command, hooking pipes to stdin and stdout
	// Record stderror into a file
	$descriptorspec = array(
		0 => array("pipe", "r"),
		1 => array("pipe", "w"),
		2 => array("file", "/tmp/cdr-telnet-errors.log", "a")
	);
	$process = proc_open('/usr/bin/telnet '.$host.' '.$port,$descriptorspec,$pipes);
 
	// If the command succeeded:
	if (is_resource($process)) {
		$line = "";
		// Keep reading the command output char by char
		// until it contains "Password:"
		while (!feof($pipes[1]) and !strpos(strtolower($line),"password:")) {
			$line .= fread($pipes[1],1);
		}
		// Wait for a second
		sleep(1);
		// Then send the password
		fwrite($pipes[0],$password."\r\n");
		$line="";
		// Keep reading line by line until we have a comma in the
		// input
		while (!feof($pipes[1]) and !strpos($line,",")) {
			$line = fgets($pipes[1]);
		}
		// Then split it into ip and tenor
		list($ip,$tenor) = split(",",strip_crlf($line));
		// Report the IP/Tenor we're capturing for:
		echo "IP: $ip\n";
		echo "Tenor: $tenor\n";
		echo "Starting capture...\n";
 
		// Get the last successful CDR seq Number for
		// the IP/Tenor combination
 
		$res = pg_query($dbconn,'SELECT MAX(seq) FROM cdr WHERE ip=\''.$ip.'\' AND tenor=\''.$tenor.'\'');
		if ($res) {
			$lastcdrrow = pg_fetch_row($res);
			$lastcdr = $lastcdrrow[0];
			echo "Last CDR for tenor is: $lastcdr\n";
		} else {
			$lastcdr = "";
			echo "Warning: Unable to query last CDR seq for Tenor\n";
		}
		// Send the last successful sequence number
		// After a tenor reset, you'll need to mess
		// around here to get all the records.
 
		fwrite($pipes[0],$lastcdr."\r\n");
		// Read and process the reply line by line
		while (!feof($pipes[1])) {
			$line = fgets($pipes[1]);
			process_line($ip,$tenor,$line);
		}
		// Then close the command pipes and the command itself
		fclose($pipes[0]);
		fclose($pipes[1]);
		$return_value = proc_close($process);
	} else {
		// If the command failed:
		echo "Error: Telnet command failed. See /tmp/cdr-telnet-errors.log";
	}
?>
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:

Select allOpen in new window

 

by: shaunwinginPosted on 2009-04-06 at 12:18:59ID: 24080763

Most impressive and well written and commented script. Looking fwd to implementing as soon as get the time as not a Linux fundi and will need a good amount of time to implement....

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...