网页打开本地应用程序

业务目标

通过网页自动打开wireshark,完成远程抓包。

业务方案

网页打开本地应用程序,本地应用程序检查本地wireshar是否存在,如果存在支持启动本地wireshark,如没有wireshark应用程序存在则安装wireshark。

业务实现流程

1、本地应用程序开发

使用vs2015新建win32控制台应用程序。

int main(int argc, char* argv[])
{
    int i = 0;
    char lcmd[256];
    char* inParm = "-B 1 -k -i rpcap://[10.21.137.228]:2002/eth0";
    //char* cmd = "D:\\Program Files\\Wireshark\\wireshark.exe";

    for (i = 0; i < argc; i++)
    {
        printf("printf argv[%d]:%s \n",i,argv[i]);
    }

    //通过获取本地wireshark注册表信息
    //,读取wireshark执行路径
    getRegWireshark();

    //把执行路径和入参组成cmd
    sprintf_s(lcmd,"%s %s",cmd, inParm);
    printf("cmd:%s \n", lcmd);

    //启动远程手抓包
    WinExec(lcmd, SW_SHOW);
    Sleep(1000*10);
    return 0;
}

wireshark注册表读取实现

int getRegWireshark()
{ 
    // Dynamic allocation will be used.  
    HKEY hKey;
    int i = 0;
    char* p = NULL;
    char* curP = NULL;
    char ansi[MY_BUFSIZE] = { 0 };

    TCHAR szProductType[MY_BUFSIZE];
    memset(szProductType, 0, sizeof(szProductType));
    DWORD dwBufLen = MY_BUFSIZE;
    LONG lRet;

    // 下面是打开注册表, 只有打开后才能做其他操作   
    lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT,  // 要打开的根键   
        TEXT("wireshark-capture-file\\shell\\open\\command"), // 要打开的子子键   
        0,        // 这个一定要为0   
        KEY_QUERY_VALUE,  //  指定打开方式,此为读   
        &hKey);    // 用来返回句柄   

                   // 判断是否打开成功
    if (lRet != ERROR_SUCCESS)
    {
        printf("RegOpenKeyEx HKEY_CLASSES_ROOT error \n");
        return 1;
    }

    //下面开始查询   
    lRet = RegQueryValueEx(hKey,  // 打开注册表时返回的句柄   
        TEXT(""),  //要查询的名称,   
        NULL,   // 一定为NULL或者0   
        NULL,
        (LPBYTE)szProductType, // 我们要的东西放在这里   
        &dwBufLen);
    // 判断是否查询成功
    if (lRet != ERROR_SUCCESS)
    {
        printf("RegQueryValueEx error \n");
        return 1;
    }

    RegCloseKey(hKey);

    WideCharToMultiByte(CP_ACP, 0, szProductType, -1, ansi, sizeof(ansi), NULL, NULL);

    p = ansi + strlen(ansi);
    for (i = strlen("\" \"%1\""); i > 0; i--)
    {
        *--p = '\0';
    }
    p = ansi;
    printf("ansi:%s \n", ansi);
    sprintf_s(cmd,"%s",++p);

}

2、应用程序安装包发布
解决方案上新建生成安装项目

注册表编辑
打开工具栏视图,编辑器,注册表,如下:
网页打开本地应用程序_第1张图片

具体配置如下:
网页打开本地应用程序_第2张图片
安装项目配置

补充
1、手动制做注册文件

使用记事本编辑注册脚本。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\mywireshark]

@=”WebshellProtocol”

“URL Protocol”=”D:\wireshark\wireshark.exe”

[HKEY_CLASSES_ROOT\mywireshark\DefaultIcon]
@=”D:\wireshark\wireshark.exe,1”
[HKEY_CLASSES_ROOT\mywireshark\shell]
[HKEY_CLASSES_ROOT\mywireshark\shell\open]
[HKEY_CLASSES_ROOT\mywireshark\shell\open\command]
@=”\”D:\wireshark\wireshark.exe\” \”%1\”“

2、修改注册文件后缀名为mywireshark.reg,双击执行。

测试网页编写


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  head>
    <body>
        <div>
            <a href="consoleApp://">
            a>
        div>
    body>
html>

测试输出

网页打开本地应用程序_第3张图片

网页打开本地应用程序_第4张图片

4、使用浏览器打开html文件。

demo 地址:http://download.csdn.net/detail/s18098934396/9907947

你可能感兴趣的:(windows,本地应用)