Using the net module
When your transaction test script needs to establish a TCP connection with a network target, you'll use the net
module from ThousandEyes. The ThousandEyes runtime environment for transaction scripts includes the net
module for creating raw TCP client sockets to servers on arbitrary ports.
Importing the Module
To use the net
module, make sure to first import it within your transaction script:
import net from 'thousandeyes';
Creating a Connection
To create a client connection to a remote server, use the net.connect
function:
await net.connect(<port>, '<host.ip.address>');
Sending Data
To send data over the socket connection, first assign the result of net.connect
to a variable:
let socket = await net.connect(80, '1.1.1.1');
Then, use the write
or writeAll
methods to send data over the socket:
await socket.writeAll('GET / HTTP/1.1\r\n\r\n');
To read from the socket, use the read
or readAll
methods:
const response = await socket.readAll();
Example GET Request
In the following example, notice that first the net
module is imported. Then, after net.connect
is called, data is sent and received over the socket, using write
and read
:
import {net} from 'thousandeyes';
runScript();
async function runScript() {
let host = 'newyork.wan.the-acme-corporation.net';
let port = 80;
let requestBody =
`GET / HTTP/1.1
Host: ${host}
User-Agent: thousandeyes-transaction
`
let client = await net.connect(port, host);
await client.write(requestBody);
let response = await client.read();
console.log(response.toString());
};
Advanced Examples
For additional examples, see the public repository of ThousandEyes transaction scripts.
Example: IMAP Login
In the following example, you establish a TCP connection; then send IMAP credentials over the connection you've created:
let host = 'box.the-acme-corporation.net';
let port = 993;
let imap_password = credentials.get('[email protected]');
const sock = await net.connectTls(port, host, {
minVersion: 'TLSv1.2',
});
sock.setEncoding('utf8');
let imap_commands = [
`? LOGIN [email protected] ${imap_password}\n`,
`? SELECT Inbox\n`,
`? FETCH 1:1 RFC822\n`,
]
for(var i=0; i < imap_commands.length; i++){
let command = imap_commands[i];
await sock.writeAll(command);
// Make driver sleep for .5 seconds
await driver.sleep(500);
console.log(command);
let response = await sock.read();
console.log(response);
}
Last updated