// snmp_test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
//#include <windows.h>
#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
#define MAXLENT 1000
TCHAR* g_strfilePath;
TCHAR* g_strfilePath1;
TCHAR* g_strIpAddress;
int g_nIndex1 = 0;
int g_nIndex2 = 0;
int g_nIndex3 = 0;
int g_nTimes = 0;
int g_nInterval = 0;
void usage()
{
printf("usage: [-f:str] [-F:str][-i:IP address] [-n: ] [-N:] {-l:number} {-t:number}\n\n");
printf(" -f The first(informquest) file you want to send\n");
printf(" -F The second(informquest) file you want to send\n");
printf(" -n The index of boot time in report buff\n");
printf(" -N The index of bott time int get request buf\n");
printf(" -m The index of bott time int get request buf\n");
printf(" -i Witch ip you want to send to\n");
printf(" -l The time between two transmission\n");
printf(" -t how much times you want to transmit file\n");
ExitProcess(1);
}
void ValidateArgs(int argc,TCHAR ** argv)
{
int i;
if (argc < 13) {
usage();
}
for (i=1;i<argc;i++)
{
if((argv[i][0]=='-') && (argv[i][2]== NULL))
{
switch(tolower(argv[i++][1]))
{
case 'f':
if (argv[i]) {
g_strfilePath = argv[i];
} else {
usage();
}
break;
case 'F':
if (argv[i]) {
g_strfilePath1 = argv[i];
} else {
usage();
}
break;
case 'i':
if (argv[i]) {
g_strIpAddress = argv[i];
} else {
usage();
}
break;
case 'l':
if (argv[i]) {
g_nInterval = _ttoi(argv[i]);
} else {
usage();
}
break;
case 'n':
if (argv[i]) {
g_nIndex1 = _ttoi(argv[i]);
} else {
usage();
}
break;
case 'N':
if (argv[i]) {
g_nIndex2 = _ttoi(argv[i]);
} else {
usage();
}
break;
case 'm':
if (argv[i]) {
g_nIndex3 = _ttoi(argv[i]);
} else {
usage();
}
break;
case 't':
if (argv[i]) {
g_nTimes = _ttoi(argv[i]);
} else {
usage();
}
break;
default:
usage();
break;
}
} else {
usage();
break;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET sock = 0;
WORD wVersionRequested = 0;
WSADATA wsaData;
int nErr = 0;
sockaddr_in addrto = { 0 }, addrfr = { 0 };
//sockaddr_in addrfrom = { 0 };
int addrlen = 0;
HANDLE hFile, hFile1= NULL;
LPOFSTRUCT lpOpstruct = NULL;
DWORD dwMaxLen;
DWORD dwLen ,dwLen1;
char *buf = new char[1000];
char *buf1 = new char[1000];
char *tmpbuf = new char[1000];
char *ipbuf;
struct sockaddr_in addrfrom = { 0 };
BOOL bRep = TRUE;
char a = 0, b = 0;
ValidateArgs(argc, argv);
if (0 == g_nInterval ) {
g_nInterval = 1000;
}
if (0 == g_nTimes) {
g_nTimes = 1;
}
dwMaxLen = MAXLENT;
hFile = CreateFile(g_strfilePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
hFile1 = CreateFile(g_strfilePath1, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if(!hFile || !hFile1) {
wprintf(L"file not exist!");
}
if((!ReadFile(hFile, (LPVOID)buf,dwMaxLen, &dwLen, NULL)) || dwLen == 0 || (!ReadFile(hFile, (LPVOID)buf1,dwMaxLen, &dwLen1, NULL) || dwLen == 0) || dwLen1 == 0) {
wprintf(L" file read failed!");
}
wVersionRequested = MAKEWORD(2,2);
nErr = WSAStartup(wVersionRequested, & wsaData);
if (0 != nErr) {
wprintf(L"Socket 2.2 init failed!");
return nErr;
}
if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup();
CloseHandle(hFile);
return 0;
}
sock = socket(
AF_INET, //UDP,TCP, etc
SOCK_DGRAM, //UDP type
IPPROTO_UDP //protocol
);
if (INVALID_SOCKET == sock ) {
wprintf(L"Socket create failed!");
WSACleanup();
return 0;
}
//prepare for the data
int cCharacters = int(wcslen((const wchar_t*)g_strIpAddress)+1);
int cbAnsi = cCharacters*2;
ipbuf = new char[cbAnsi];
memset(&addrto,0,sizeof(addrto));
WideCharToMultiByte(CP_ACP,0, (LPCWSTR)g_strIpAddress,cCharacters,ipbuf,cbAnsi, NULL, NULL);
addrto.sin_family = AF_INET;
addrto.sin_port = htons(162);
addrto.sin_addr.s_addr = inet_addr(ipbuf);
addrlen = sizeof(struct sockaddr_in);
//send first inform request
if (sendto(sock, buf, dwLen, 0, (sockaddr*)&addrto, sizeof(addrto)) == SOCKET_ERROR) {
nErr = WSAGetLastError();
wprintf(L"WSAGetLastError = %d ", nErr);
return 0;
}
RETRY:
//recv report or get request
if(!recvfrom(sock, tmpbuf, MAXLENT, 0, (sockaddr*)&addrfr, &addrlen)) {
nErr = WSAGetLastError();
wprintf(L"WSAGetLastError = %d ", nErr);
return 0;
}
//prepare for data(assemble the second file and the time just received)
if (bRep) {
a = tmpbuf[g_nIndex1];
b = tmpbuf[g_nIndex1+1];
} else {
a = tmpbuf[g_nIndex3];
b = tmpbuf[g_nIndex3+1];
}
buf1[g_nIndex2] = a;
buf1[g_nIndex2+1] = b;
//send second inform_request
if (sendto(sock, buf1, dwLen, 0, (sockaddr*)&addrto, sizeof(addrto)) == SOCKET_ERROR) {
nErr = WSAGetLastError();
wprintf(L"WSAGetLastError = %d ", nErr);
return 0;
}
if (g_nTimes--)
{
Sleep(g_nInterval);
goto RETRY;
}
closesocket(sock);
WSACleanup();
CloseHandle(hFile);
return 0;
}
10.30
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.