1. 程式人生 > >vc++實現SNMP資訊刺探程式

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("

[email protected]   2004/8/10====/n");
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