scprogs
asked on
Ping time stamping
I have two pc's on the same network.
One of them I know the current time, the other is inaccessible by me.
I have found that you can ping another machine to get a timestamp from it.
So it would look like ...
PC1 time ping sent
PC2 time ping received
PC2 time return ping sent
PC1 time return recieved
I have the following code
Dim pingbyte(31) As Byte
Dim timestamp As New Net.NetworkInformation.Pin gOptions
PingReturn = New Net.NetworkInformation.Pin g
sReturn = PingReturn.Send("xxx.xxx.x xx.xxx")
Dim properties As IPGlobalProperties = IPGlobalProperties.GetIPGl obalProper ties()
Dim statistics As IcmpV4Statistics = properties.GetIcmpV4Statis tics()
MsgBox("Timestamp Requests ... Sent: " & statistics.TimestampReques tsSent.ToS tring & " Received: " & statistics.TimestampReques tsReceived .ToString & vbCr & "Timestamp Replies ... Sent: " & statistics.TimestampReplie sSent.ToSt ring & " Received: " & statistics.TimestampReplie sReceived. ToString)
The message box always has 0 for sent and received ... What am I missing?
One of them I know the current time, the other is inaccessible by me.
I have found that you can ping another machine to get a timestamp from it.
So it would look like ...
PC1 time ping sent
PC2 time ping received
PC2 time return ping sent
PC1 time return recieved
I have the following code
Dim pingbyte(31) As Byte
Dim timestamp As New Net.NetworkInformation.Pin
PingReturn = New Net.NetworkInformation.Pin
sReturn = PingReturn.Send("xxx.xxx.x
Dim properties As IPGlobalProperties = IPGlobalProperties.GetIPGl
Dim statistics As IcmpV4Statistics = properties.GetIcmpV4Statis
MsgBox("Timestamp Requests ... Sent: " & statistics.TimestampReques
The message box always has 0 for sent and received ... What am I missing?
See if your numbers match what you see in netstat -s
(run netstat -s from a command prompt and look in the ICMP4 stats section)
(run netstat -s from a command prompt and look in the ICMP4 stats section)
I don't know if there is a user-friendly way to send ICMP Get Timestamp messages using VB.NET. If you really need to do this, you may need to build the packet manually, byte by byte.
ASKER
Yes they are the same.
How do you do a ping and get the data to post?
How do you do a ping and get the data to post?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Yes I found the wiki page that is why I'm trying this in the first place.
Also found the C++ pages but I'm writing in vb.net.
According to a quick search from google a few days ago I was able to ascertain that one could achieve this with the new api's in .net 4.5
Can this be done via a batch file or cmd command?
Also found the C++ pages but I'm writing in vb.net.
According to a quick search from google a few days ago I was able to ascertain that one could achieve this with the new api's in .net 4.5
Can this be done via a batch file or cmd command?
ASKER
Convert C# to VB.NET web page does not covert the code you provided error on line 10
#include <stdio.h>
#include <windows.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
#ifndef UNICODE
#define UNICODE
#endif
int wmain(int argc, wchar_t *argv[])
{
LPTIME_OF_DAY_INFO pBuf = NULL;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
if (argc > 2)
{
fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
exit(1);
}
// The server is not the default local computer.
//
if (argc == 2)
pszServerName = (LPTSTR) argv[1];
//
// Call the NetRemoteTOD function.
//
nStatus = NetRemoteTOD((LPCWSTR) pszServerName,
(LPBYTE *)&pBuf);
//
// If the function succeeds, display the current date and time.
//
if (nStatus == NERR_Success)
{
if (pBuf != NULL)
{
fprintf(stderr, "\nThe current date is: %d/%d/%d\n",
pBuf->tod_month, pBuf->tod_day, pBuf->tod_year);
fprintf(stderr, "The current time is: %d:%d:%d\n",
pBuf->tod_hours, pBuf->tod_mins, pBuf->tod_secs);
}
}
//
// Otherwise, display a system error.
else
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
//
// Free the allocated buffer.
//
if (pBuf != NULL)
NetApiBufferFree(pBuf);
return 0;
}
#include <stdio.h>
#include <windows.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
#ifndef UNICODE
#define UNICODE
#endif
int wmain(int argc, wchar_t *argv[])
{
LPTIME_OF_DAY_INFO pBuf = NULL;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
if (argc > 2)
{
fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
exit(1);
}
// The server is not the default local computer.
//
if (argc == 2)
pszServerName = (LPTSTR) argv[1];
//
// Call the NetRemoteTOD function.
//
nStatus = NetRemoteTOD((LPCWSTR) pszServerName,
(LPBYTE *)&pBuf);
//
// If the function succeeds, display the current date and time.
//
if (nStatus == NERR_Success)
{
if (pBuf != NULL)
{
fprintf(stderr, "\nThe current date is: %d/%d/%d\n",
pBuf->tod_month, pBuf->tod_day, pBuf->tod_year);
fprintf(stderr, "The current time is: %d:%d:%d\n",
pBuf->tod_hours, pBuf->tod_mins, pBuf->tod_secs);
}
}
//
// Otherwise, display a system error.
else
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
//
// Free the allocated buffer.
//
if (pBuf != NULL)
NetApiBufferFree(pBuf);
return 0;
}
ASKER
An error occured converting your code, probably due to a syntax error:
-- line 10 col 1: EOF expected
-- line 10 col 1: EOF expected
Keep in mind that some people consider it a security vulnerability to respond to that type of ping request so there are not many tools that work with it and you might have to change some configurations to get the remote machine to actually respond.
http://capec.mitre.org/data/definitions/295.html
hping and nping are both open source tools that will send ICMP timestamp requests. I don't think there is any built in way to do it from the command prompt.
http://capec.mitre.org/data/definitions/295.html
hping and nping are both open source tools that will send ICMP timestamp requests. I don't think there is any built in way to do it from the command prompt.
Which line is line 10?
Just use main, and char instead of wmain and wchar_t....
Just use main, and char instead of wmain and wchar_t....
ASKER
Imports System.Net.NetworkInformat
Imports System.Net.NetworkInformat
Imports System.Net.NetworkInformat
These three lines are in the declarations section.
' Ping
Dim PingReturn As System.Net.NetworkInformat
Dim sReturn As System.Net.NetworkInformat
Dim TimeReturn As System.Net.NetworkInformat