大西彰のウェブログ

データベース系技術ネタ、国際化技術ネタなど、徒然なるままに

目次

Blog 利用状況

ニュース


こんにちは。大西 彰です。
私のブログでは、データベース技術、ソフトウェアの国際化などを取り扱っています。ニッチだけど重要なネタがつまっています。
ブログの内容は無保証です。
また、本ブログでの発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。



マイクロソフトライセンスセンター
マイクロソフトライセンスセンター
マイクロソフトライセンスセンター
ウィルコムストア
ソースネクスト
デル株式会社
アフィリエイト リンクシェア ブログ 携帯対応 成果報酬 広告 テンプレート ブログパーツ

テクノラティプロフィール

記事のカテゴリ

過去の記事

カテゴリ

イメージギャラリ

My blog

Visual FoxPro

Visual Studio

Web Sites

Windows Vista

ブログ

免責事項

不正な共有フォルダ発見器

企業でネットワークを使われている皆様、ネットワークで不正が行われていることを意識したことがありますか。
ソフトウェア(市販ソフト、音楽ソフトなど)の違法コピーがネットワークに蔓延している企業は危ないです。

不正だと思われる共有フォルダを発見するための手助けをする簡単なプログラムを公開します。
IsInvalidName関数のif文を適宜書き換えて、ご利用ください。

//////////////////////////////////////////////////////
// FindInvalidShare.c
// Author: Akira Onishi

// cl FindInvalidShare.c /link Netapi32.lib
//////////////////////////////////////////////////////

#define UNICODE
#include <windows.h>
#include <stdio.h>
#include <lm.h>

int HasKeyWord(LPWSTR name, LPWSTR keyword)
{
    wchar_t *p, *k;
    p = wcschr(name, keyword[0]);
    if (p == NULL) {
        return 0;
    }
    p ++;
    k = keyword+1;
    while (*k != 0) {
        if (*p != *k) {
            return 0;
        }
        p++;
        k++;
    }
    return 1;
}

/*
怪しい共有フォルダを判定する
*/

int IsInvalidName(LPWSTR name)
{
    if (HasKeyWord(name, L"usic")) return 1;
    if (HasKeyWord(name, L"MP3" )) return 1;
    if (HasKeyWord(name, L"mp3" )) return 1;
    if (HasKeyWord(name, L"SONG")) return 1;
    if (HasKeyWord(name, L"ongs")) return 1;
    if (HasKeyWord(name, L"ovie")) return 1;
    if (HasKeyWord(name, L"Game")) return 1;
    return 0;
}

void wmain(int argc, TCHAR *lpszArgv[])
{
    PSHARE_INFO_0 BufPtr,p;
    NET_API_STATUS res;
    LPTSTR    lpszServer = NULL;
    DWORD er=0,tr=0,resume=0, i;
    switch(argc) {
    case 2:
        lpszServer = lpszArgv[1];
        break;
    default:
        lpszServer = NULL;
        printf("Usage: FindInvalidShare <コンピュータ名>\n");
        return;
    }
    do {
        res = NetShareEnum (lpszServer, 0, (LPBYTE *) &BufPtr,
                                           -1, &er, &tr, &resume);
        if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA) {
            p=BufPtr;
            for(i=1;i<=er;i++) {
               if (IsInvalidName(p->shi0_netname)) {
                    printf("%S\\%S\n",lpszServer, p->shi0_netname);
                }
                p++;
            }
            NetApiBufferFree(BufPtr);
        }
        else
            printf("Error: %ld\n",res);
    } while (res==ERROR_MORE_DATA);
    return;
}

Windowsネットワークのコンピュータ一覧は、NET VIEWコマンドで取得できます。
取得したコンピュータ名を使って、FindInvalidShareコマンドを呼び出すと、IsInvalidName関数に定義されたキーワードに部分一致する共有フォルダを持っていればコンピュータ名と共有名がコンソールに出力されます。

投稿日時 : 2004年10月15日 16:53

コメントを追加

# re: ふと疑問: ITPro で必要なコーディング能力 2005/08/23 11:17 システム管理な雑記 -- Sleeve notes of a sysadmin --

re: ふと疑問: ITPro で必要なコーディング能力

# re: ウィニーの危険性について、マイクロソフトがわかりやすく解説 2006/03/17 22:58 河端善博の .TEXT でウェブログ

re: ウィニーの危険性について、マイクロソフトがわかりやすく解説

タイトル  
名前  
URL
コメント