vc++實現SNMP資訊刺探程式
/*---------------------------------------
SNMP資訊刺探程式
----------------------------------------*/
#include <stdio.h>
#include <malloc.h>
#include <snmp.h>
#include <mgmtapi.h>
#pragma comment(lib,"Mgmtapi.lib")
#pragma comment(lib,"Snmpapi.lib")
//利用 SNMP API時需要以上標頭檔案和庫檔案
#define GET 1 //get,就理解成獲取一個資訊。
#define GETNEXT 2 //getnext,就理解成獲取下一個資訊。
#define WALK 3 //walk,就理解成獲取一堆資訊,即所有資料庫子樹/子目錄的資訊
#define TIMEOUT 6000 /* milliseconds */
#define RETRIES 3
//一些有用的oid
char *SnmpOid[5]={".1.3.6.1.2.1.25.4.2.1.2",//程序列表
".1.3.6.1.4.1.77.1.2.25.1.1",//系統使用者
".1.3.6.1.4.1.77.1.4.1.0",//域名
".1.3.6.1.2.1.25.6.3.1.2",//列出安裝的軟體
".1.3.6.1.2.1.1"};// 列出系統資訊
void usage(char *name)
{
printf("=================SNMP tool================/n");
printf("
printf("/nusage: %s [remoteip] [sysprocess|sysuser|domainname|sysinf|software]/n",name);
printf("Exameple: %s 192.168.1.1 sysuser/n",name);
}
int main(int argc,char *argv[])
{
int operation;
LPSTR agent;
LPSTR community;
RFC1157VarBindList variableBindings;
LPSNMP_MGR_SESSION session;
int timeout = TIMEOUT;
int retries = RETRIES;
int i;
BYTE requestType;
AsnInteger errorStatus;
AsnInteger errorIndex;
char *chkPtr = NULL;
operation = WALK; //這個程式使用WALK來獲取資訊
if (argc != 3)
{
usage(argv[0]);
return 0;
}
else
{
AsnObjectIdentifier reqObject;
// 取得IP地址
agent = (LPSTR)SNMP_malloc(strlen(*argv) + 1);
strcpy(agent, argv[1]);
community="public";//設定查詢密碼
variableBindings.list = NULL;
variableBindings.len = 0;
// 設定 oid
if(!strcmp(argv[2],"sysprocess"))i=0;
else if(!strcmp(argv[2],"sysuser"))i=1;
else if(!strcmp(argv[2],"domainname"))i=2;
else if(!strcmp(argv[2],"software"))i=3;
else if(!strcmp(argv[2],"sysinf"))i=4;
else{
usage(argv[0]);
return 0;
}
printf("%s/n",SnmpOid[i]);
// 把字串轉換成標準oid
if (!SnmpMgrStrToOid(SnmpOid[i], &reqObject))
{
printf("Error: Invalid oid, %s, specified./n", *argv);
return 1;
}
else
{
variableBindings.len++;
if ((variableBindings.list = (RFC1157VarBind *)SNMP_realloc(
variableBindings.list, sizeof(RFC1157VarBind) *
variableBindings.len)) == NULL)
{
printf("Error: Error allocating oid, %s./n",*argv);
return 1;
}
variableBindings.list[variableBindings.len - 1].name=reqObject;
variableBindings.list[variableBindings.len - 1].value.asnType=ASN_NULL;
}
// Make sure only one variable binding was specified if operation
// is WALK.
if (operation == WALK && variableBindings.len != 1)
{
printf("Error: Multiple oids specified for WALK./n");
return 1;
}
// Establish a SNMP session to communicate with the remote agent. The
// community, communications timeout, and communications retry count
// for the session are also required.
if ((session = SnmpMgrOpen(agent, community, timeout, retries)) == NULL)
{
printf("error on SnmpMgrOpen %d/n", GetLastError());
return 1;
}
} // end if
{
AsnObjectIdentifier root;
AsnObjectIdentifier tempOid;
SnmpUtilOidCpy(&root, &variableBindings.list[0].name);
requestType = ASN_RFC1157_GETNEXTREQUEST;
for(;;)
{
if (!SnmpMgrRequest(session, requestType, &variableBindings,
&errorStatus, &errorIndex))
{
printf("error on SnmpMgrRequest %d/n", GetLastError());
break;
}
else
{
if (errorStatus == SNMP_ERRORSTATUS_NOSUCHNAME ||
SnmpUtilOidNCmp(&variableBindings.list[0].name,
&root, root.idLength))
{
printf("End of MIB subtree./n/n");
break;
}
if (errorStatus > 0)
{
printf("Error: errorStatus=%d, errorIndex=%d /n", errorStatus, errorIndex);
break;
}
else
{
// 列印查詢的結果
char *string = NULL;
SnmpMgrOidToStr(&variableBindings.list[0].name, &string);
printf("Variable = %s/n", string);
if (string) SNMP_free(string);
printf("Value = ");
SnmpUtilPrintAsnAny(&variableBindings.list[0].value);
printf("/n");
}
} // end if()
// 準備下一次查詢
SnmpUtilOidCpy(&tempOid, &variableBindings.list[0].name);
SnmpUtilVarBindFree(&variableBindings.list[0]);
SnmpUtilOidCpy(&variableBindings.list[0].name, &tempOid);
variableBindings.list[0].value.asnType = ASN_NULL;
SnmpUtilOidFree(&tempOid);
} // end while()
// 釋放資源
SnmpUtilVarBindListFree(&variableBindings);
SnmpUtilOidFree(&root);
}
// 關閉 SNMP session
if (!SnmpMgrClose(session))//清理退出
{
printf("error on SnmpMgrClose %d/n", GetLastError());
return 1;
}
return 0;
}
相關推薦
vc++實現SNMP資訊刺探程式
/*---------------------------------------SNMP資訊刺探程式 ----------------------------------------*/ #include <stdio.h>#include <mallo
vc 實現無程序無DLL無硬碟檔案無啟動項的ICMP後門後門程式
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
基於java的微信小程式的實現(五)使用者個人資訊小程式端開發
1.個人資訊頁面展示 2.顯示個人資訊功能 1.需求分析 在該頁面首先需要在載入完畢後去呼叫後端的查找個人資訊的介面,並將返回的值回顯到個人資訊頁面上 2.js程式碼的編寫 onLoad:function(params){ var me=this;
Java實現微信小程式登入 獲取使用者資訊
小程式比公眾號授權登入 更加簡單 其實沒什麼是後臺需要處理的 前端傳過來一個code 我們儲存以下通過code獲取過來的openid就可以 其他的使用者資訊 前端小程式那邊可以獲取。首先既然是小程式登入 你要有一個你自己的小程式還是要拿到你自己的appid和appSecret
VC實現程式自刪除(三種方法)
1、Gary Nebbett的方法 Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者。乃NT系統一等一的高手。 下面就分析一些他的這段程式碼,這段程式碼在PROCESS沒有結束前就將啟動PROCESS的EXE檔案刪除了
黑馬程式設計師 C#學習筆記⑥ 三層架構基礎實現員工資訊管理
---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 三層架構定義 1、表現層(UIL):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。 2、業
JAVA 實現對稱解密小程式使用者資訊(AES-128-CBC演算法)
需要引入bcprov.jar包 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</ar
用VC++實現Console程式顯示彩色文字
用vc++寫console程式時,整天對著黑紙白字的螢幕,感覺很鬱悶吧?很多人想用CONIO.H/GRAPHICS.H中的一些函式來實現,卻發現VC++根本沒有這些標頭檔案。當然了CONIO.H/GRAPHICS.H是BORLAND TC/BC專有的標頭檔案,所以vc++
VC++實現IP與ARP資訊獲取,可以同理實現APR攻擊
ARP(Address Resolution Protocol,地址解析協議)是獲取實體地址的一個TCP/IP協議。某節點的IP地址的ARP請求被廣播到網路上後,這個節點會收到確認 其實體地址的應答,這樣的資料包才能被傳送出去。RARP(逆向ARP)經常在無盤工作站上使用,以
用VC++實現應用程式視窗的任意分割(2)
一、關於CSplitterWnd類 我們在使用CuteFtp或者NetAnt等工具的時候,一般都會被其複雜的介面所吸引,在這些介面中視窗被分割為若干的區域,真正做到了視窗的任意分割。那麼我們自己如何建立類似的介面,也實現視窗的任意的分割呢?在VC6.0中這就需要使用到CSplitterWnd類。CSplitt
VC++MFC對話方塊應用程式實現程式最小化到系統托盤
轉自:http://blog.sina.com.cn/s/blog_6b23bc700100pqrm.html 現在使用系統托盤圖示的程式越來越多,尤其是需要長時間執行的程式。這並不是什麼高深的技術,純當做個筆記。 第一步:定義一個 NOTIFYICONDATA 結構
Canny邊緣檢測算法原理及其VC實現詳解(一)
常用 差分 實現圖 還需要 鏈接 傳感器 出了 關系 位置 轉自:http://blog.csdn.net/likezhaobin/article/details/6892176 圖象的邊緣是指圖象局部區域亮度變化顯著的部分,該區域的灰度剖面一般可以看作是一個階躍,既從
VC實現字符串分割的函數strtok
can blank hfs vc++ suv edi qbc plt hid Python網絡爬蟲-正則表達式 分享第二套C語言源代碼合集 vc++6.0如何捕獲關機事件並執行我自己的代碼 淺談面向對象--《ThinkinginJava》讀書筆記(一) zv5拙侔號
QDBus實現只執行一個程式並在新標籤開啟文字
深度編輯器向我們展示了程式單例並在新標籤開啟文字,我好羨慕啊! QDBus概念太抽象,看了幾天都沒看懂,好鬱悶,然後做其他專案去了,看看電視,騎騎單車,晒晒太陽,賞賞花,然後再來看看QDBus,一句一句除錯,實驗成功後,發現QDBus更像是另一種 Signal/Slot。 參考: https:/
Linux下實現彩色進度條程式
程式碼: #include <stdio.h> #include <unistd.h> #include <string.h> int main() { int i = 0; char bar[101]; const char *la
VC++6.0 Win32應用程式 如何新增窗體 ------阿冬專欄
1、建立一個win32 application。選一個簡單的win32程式。名為win32dialog 2、【插入】-【資源】-選【dialog】-點【新建】 3、點儲存,命名為win32dialog.rc。 4、關掉子視窗(編輯框),左邊 fileview中 【新增檔案到工作區】選上win32di
python基於併發與socket實現遠端檔案傳輸程式
FTP程式 Client: * bin/start.py 程式入口 * conf/配置檔案存放 * core/ * auth.py 登陸,註冊以及上傳下載檢視當前資料夾下檔案以及刪除功能存放 * cline.py 與服務端通訊 * home 本地使用者目錄 Server: * bin/
應用程序實現對其他應用程式的呼叫
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Python實現計算資訊增益的夏農熵
夏農熵公式: # -*- coding:utf-8 -*- import math __author__ = 'yangxin' """ 一條資訊的資訊量大小和它的不確定性有直接的關係。比如說,我們要搞清楚一件非常非常不確定的事,或是我們一無所知的事情, 就需要了解大量的資訊。相反,
用nodejs建立伺服器實現使用者資訊的增刪改查
1.目錄的結構 node_modules 儲存的是下載好的所需要的包檔案目錄(使用npm下載) public 儲存的是靜態資源(即寫好的HTML頁面) &nb