線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1789
推到 Plurk!
推到 Facebook!

如何取得局域網中任意一台的進程表,能否結束該進程表的進程?

尚未結案
billyguo
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-27 10:37:47 IP:218.18.xxx.xxx 未訂閱
各位大大,如何取得局域網中任意一台的進程表,能否結束該進程表的進程?
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-27 22:37:58 IP:211.162.xxx.xxx 未訂閱
Hi,billyguo,您好! 不知道小弟是否理解錯誤:您是要獲得局域網中任意一台Computer的進程表嗎?如果是的話,不妨看看下面的討論(sorry,小弟功力有限,針對的OS是Win32)    這樣的遠端掃描,我們稱之爲刺探 對Win2000(包括WinXP,2003)來說,關閉了TCP139和445埠以後,安全性會提高很多,起碼很多對系統資訊的刺探掃描也無法進行了。但是對於啓動了SNMP的系統來說,嘿嘿,問題可就不一樣了。。。。 來看看SNMP爲何方神聖: SNMP(Simple Network Management Protocol)簡單網路管理協定。具體描述看下面的Link: http://www.cnpaf.net/cnpafweb/htm/3/2004_4_19_504.html 然後再來看看community strings,可以理解成爲基於SNMP協定資訊通信時使用的一種“查詢密碼”。當使用特殊的用戶端應用程式,通過該“查詢密碼”community strings的驗證,將獲得對應的許可權(唯讀 或者 讀寫)對SNMP中管理資訊庫(MIB)進行訪問。而管理資訊庫(MIB)中則保存了系統所有的重要資訊。也就是說,如果可以知道community strings 這個“查詢密碼”,我們就可以刺探系統的資訊了。有點遺憾的是,很多網路設備廠商以及作業系統廠商,在初始狀態下,都使用比較統一的“查詢密碼”,哇哈哈哈,這不就給我們提供了足夠的方便了嘛(Win2000系統支援初始的“查詢密碼”community strings 爲:public) 好啦,來Win2000 Server Resource Kit中找找寶吧,恩,就它啦:snmputil.exe,看看: snmputil,就是程式名喲。 get,就理解成獲取一個資訊。 getnext,就理解成獲取下一個資訊。 walk,就理解成獲取一堆資訊(嗯,應該說所有資料庫子樹/子目錄的資訊) agent,具體某台Computer啦。 community,嗯就是那個“community strings”“查詢密碼”啦。 oid,這個要多說一下,這個呢,就是物件識別代碼(Object Identifier)。 可以把oid理解成MIB管理資訊庫中各種資訊分類存放樹資源的一個數位標識。 具體的資料可以查閱Resource Kit的Help和其相關文章 那我們總結一下該程式能幹什麽呢: snmputil walk 對方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系統進程 snmputil walk 對方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系統用戶列表 snmputil get 對方ip public .1.3.6.1.4.1.77.1.4.1.0 列出功能變數名稱 snmputil walk 對方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安裝的軟體 snmputil walk 對方ip public .1.3.6.1.2.1.1 列出系統資訊 很明顯,如果要自己來寫code來實現的話,應該在snmp上做手腳,下面轉貼一篇技術含量很高的文章: https://www.xfocus.net/bbs/index.php?act=ST&f=3&t=37628 本帖子原來是yztgx的投稿文章,被quack轉入論壇。 使用SNMP WinApi實現Snmp服務探測 探測Snmp服務是否開放,並且獲得系統名。 網上使用SNMP WinApi的程式碼很少,而微軟在SNMP方面的支援很全,但用起來比較複雜.本人正好做這方面工作,寫了個簡單的代碼來調用SNMP API,就當抛磚引玉吧:-) 個人瞭解有限,希望有高手來繼續豐富一下 代碼比較簡單,所以沒加注釋,參考MSDN吧 :-)

//snmpping.cpp detect remote host snmp service
#pragma comment(lib,"Mgmtapi.lib")
#pragma comment(lib,"Snmpapi.lib")    #include 
#include 
#include     DWORD InitSnmp(LPCSTR lpszDestIP, LPCSTR lpszCommunity, LPSNMP_MGR_SESSION& lpMgrSession )
{
DWORD dwErrorCode = ERROR_NOT_FOUND;
if (lpszCommunity) 
lpMgrSession = SnmpMgrOpen((char *)lpszDestIP, (char *)lpszCommunity, 6000,     1 );
else
lpMgrSession = SnmpMgrOpen((char *)lpszDestIP, "public", 6000, 1 );
if(lpMgrSession)
{
dwErrorCode = ERROR_SUCCESS;
}
else
dwErrorCode = GetLastError();
return dwErrorCode;
}    void CleanupSnmp( LPSNMP_MGR_SESSION lpMgrSession )
{
if( lpMgrSession != NULL )
SnmpMgrClose(lpMgrSession );
}    DWORD GetSysName(LPSNMP_MGR_SESSION lpMgrSession,char * pszSysName,int nSysNameLen)
{
DWORD dwRet = ERROR_NOT_FOUND;
BOOL bRet = FALSE;
int nBindSize = 0;
AsnInteger nErrStatus, nErrIndex;
SnmpVarBindList varBindings;
AsnObjectIdentifier reqObject;    varBindings.list = NULL;
varBindings.len = 0;        bRet = SnmpMgrStrToOid( ".1.3.6.1.2.1.1.5.0", &reqObject );
if (bRet)
{
nBindSize = sizeof( SnmpVarBind ); 
varBindings.list = (SnmpVarBind *)SnmpUtilMemAlloc(nBindSize);    varBindings.list[varBindings.len].value.asnType = ASN_NULL;
varBindings.len++;    if(varBindings.list)
{
SnmpUtilOidCpy( &(varBindings.list[0].name), &reqObject);
if(SnmpMgrRequest(     lpMgrSession,SNMP_PDU_GET,&varBindings,&nErrStatus,&nErrIndex))
{
if (nSysNameLen >     varBindings.list[0].value.asnValue.bits.length)
{
nSysNameLen =     varBindings.list[0].value.asnValue.bits.length;    memcpy(pszSysName,varBindings.list[0].value.asnValue.bits.stream,nSysNameLen);
dwRet = ERROR_SUCCESS;
}
}
}
SnmpUtilOidFree(&varBindings.list[0].name);
SnmpUtilVarBindListFree( &varBindings );
}
return dwRet;
}    void main(int argc,char ** argv)
{
DWORD dwRet = ERROR_NOT_FOUND;;
char szSysName[512] = {0};
int nSysNameLen = 512;    if ((argc < 2)||(argc > 3))
{
printf("snmpping, code by yztgx@163.net");
printf("sample:n%s 192.168.3.1 public n",argv[0]);
return;
}
LPSNMP_MGR_SESSION lpMgrSession = NULL;    dwRet = InitSnmp(argv[1],argv[2],lpMgrSession);    if (dwRet != ERROR_SUCCESS)
{
printf("Init Snmp failed!n");
return ;
}
dwRet = GetSysName(lpMgrSession,szSysName,nSysNameLen);
if (dwRet == ERROR_SUCCESS)
printf("SNMP enabled and available.nSNMP System Name is %sn",szSysName);
else
printf("No answer from hostn");    CleanupSnmp( lpMgrSession );
lpMgrSession = NULL;
} 
該文作者的Blog是:http://blog.csdn.net/yztgx,看看,或許會有收穫的 > ================================= <>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-29 17:38:00 IP:211.76.xxx.xxx 未訂閱
貢獻一點點拙見 之前我也想過此問題,有些網路上有提供一些小工具程式可以做到,或者是利用 Registry 等方式,但後來實驗結果不完全在所有電腦都可以,會有一些有的沒的問題要克服.... 所以最後我自己採取的做法是在欲控制的電腦都放一隻自己寫的小程式,看是要走 TCP or UDP , 要用哪個 Port Number 就完全自己控制啦,更是做什麼事都可以,彈性較大啦,不過就看你是否能接受這個做法了...
------
JackTasy
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-30 10:16:50 IP:211.162.xxx.xxx 未訂閱
不好意思,再插個花: 如果能在遠端Computer上裝個受控端的話,問題當然也就不會太複雜了,不妨看看小弟在這篇中的討論 >人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-26 13:51:31 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-19 21:09:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!