V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
y1261474584
V2EX  ›  问与答

用 Windows 记事本打开 https 网址为什么会弹出 Windows 安全?

  •  
  •   y1261474584 · 2017-08-08 20:34:08 +08:00 via Android · 2329 次点击
    这是一个创建于 2698 天前的主题,其中的信息可能已经有所发展或是发生改变。
    让我输入用户名和密码(我怎么会知道!)。和用浏览器打开的效果完全不一样,应该出现的不是网页源代码吗?这是什么黑科技⁈
    https://i.loli.net/2017/08/08/5989ad03b728f.png
    你们可以去测试一番
    16 条回复    2017-08-10 10:20:04 +08:00
    ryd994
        1
    ryd994  
       2017-08-08 20:48:31 +08:00 via Android
    切,我 kde 还能开 sftp 呢
    yksoft1
        2
    yksoft1  
       2017-08-08 20:56:41 +08:00
    你查一下 notepad.exe 的导入表,有用到一个和网络有关的函数吗
    geelaw
        3
    geelaw  
       2017-08-08 21:00:49 +08:00
    这是 common dialog 想要访问这个网络位置(当成文件夹,类似 network drive mapping ),而不是“下载并打开文件”。
    yksoft1
        4
    yksoft1  
       2017-08-08 21:05:44 +08:00
    Windows 标准文件操作的 CreateFile 那一套能不能支持 http 之类互联网上的协议都是问题吧
    ProjectAmber
        5
    ProjectAmber  
       2017-08-08 21:18:43 +08:00
    可能是 WebDAV。
    lzhr
        6
    lzhr  
       2017-08-08 21:46:54 +08:00   ❤️ 1
    有些人不懂,又不去实践。
    测试:
    https://www.v2ex.com ,直接下载打开 html ;
    https://baidu.com ,直接;
    https://www.baidu.com ,需要密码;
    https://www.12306.cn ,出现选择证书
    crab
        7
    crab  
       2017-08-08 22:02:44 +08:00
    @yksoft1 notepad 绝对支持的。以前都这样看源码。
    yksoft1
        8
    yksoft1  
       2017-08-08 22:24:05 +08:00   ❤️ 1
    win8.1 cmd、“运行”对话框下 notepad http://www.cnbeta.com 出现 messagebox
    ---------------------------
    记事本
    ---------------------------
    文件名、目录名或卷标语法不正确。


    ---------------------------
    确定
    ---------------------------

    用 comdlg32 打开 对话框打开 还真出现了 html。

    用 process explorer 查看 notepad 打开的文件,实际打开的是磁盘上的 C:\Users\user\AppData\Local\Microsoft\Windows\INetCache\counters.dat 这个文件,标题栏显示的文件名是典型的 IE 缓存文件名格式。
    然后查看加载的模块,出现了 ieframe.dll 。
    打开另一个记事本,不打开 打开 对话框,没有看到 ie 的 DLL 被加载;用 打开 对话框打开一个本地文件,ieframe.dll 被加载,但是,前面提到的那个文件没有被打开。
    结论是,管理通用打开对话框的 comdlg32.dll 调用了 IE 的 com 组件将目标 url 下载到 ie 缓存并向记事本返回了 ie 缓存中的文件路径。
    可以自己写一个用 GetOpenFileName 函数的程序测试一下。
    yksoft1
        9
    yksoft1  
       2017-08-08 23:00:38 +08:00
    测试例程
    #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    int main(int argc, char** argv)
    {
    int r;
    char retpath[MAX_PATH+1];
    OPENFILENAME ofn ;

    memset(&ofn, 0, sizeof(ofn));

    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrDefExt = NULL;
    ofn.lpstrFile = retpath;

    if(argc>=2)
    strncpy(retpath, argv[1], strlen(argv[1])<MAX_PATH?strlen(argv[1]):MAX_PATH);
    else
    ofn.lpstrFile[0] = '\0';

    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = NULL;
    ofn.nFilterIndex = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.lpstrTitle = "Test";
    ofn.Flags = 0;

    r=GetOpenFileName(&ofn);

    if(r)
    printf("GetOpenFileName got filename %s", retpath);
    else
    printf("error: %d", GetLastError());

    return 0;
    }

    编译:
    D:\>c:\mingw2\bin\gcc gofn.c -lcomdlg32 -ogofn.exe

    运行第一次(不输入命令行参数),弹出对话框输入 https://www.v2ex.com 后,对话框卡了一下后返回
    D:\>gofn
    GetOpenFileName got filename C:\Users\user\AppData\Local\Microsoft\Windows\INetCache\IE\TJ1BE227\3OQBB5YK

    运行第二次,命令行输入
    D:\>gofn c:\windows\win.ini
    GetOpenFileName got filename C:\Windows\win.ini
    对话框正常弹出并自动定位到正确的目录。

    运行第三次,命令行输入
    D:\>gofn https://www.v2ex.com
    error: 0
    对话框不弹出且 GetLastError 不能得到错误码。这就不知道为什么了。
    yksoft1
        10
    yksoft1  
       2017-08-08 23:07:41 +08:00
    将 GetLastError 改为 comdlg32 专用的 CommDlgExtendedError,结果如下
    D:\>gofn h tt p s:// www.v2ex.com
    error: 12290

    返回错误代码 0x3002,即 FNERR_INVALIDFILENAME,错误的文件名。
    azh7138m
        11
    azh7138m  
       2017-08-08 23:33:20 +08:00 via Android
    @yksoft1 这个全角看着好难受。。。
    yksoft1
        12
    yksoft1  
       2017-08-08 23:40:09 +08:00
    @azh7138m 因为连续出现链接被 V2EX 系统警告了。

    @lzjr 至于百度出现认证的原因,可能需要抓包才能知道了,我个人估计和反爬虫机制有关,https 请求和正常的有区别。我机子没装 IE 用的 12306 证书,开 12306 会出现带 IE 图标的错误对话框 0x80004002 不支持此接口。
    yksoft1
        13
    yksoft1  
       2017-08-09 00:12:33 +08:00
    另外,Windows 记事本好像只支持 DOS 行尾吧。。。
    popok
        14
    popok  
       2017-08-09 08:44:32 +08:00
    抓个包看下
    首先是 OPTIONS 请求
    然后是 PROPFIND 请求,然后就弹出登录框了,这个和服务器配置有关吧
    hx1997
        15
    hx1997  
       2017-08-09 09:06:49 +08:00 via Android
    我昨晚测试的爱奇艺和百度 ( https://www.XXX.com/) 都没有弹出要求凭据的对话框,Windows 10,不知道为啥
    y1261474584
        16
    y1261474584  
    OP
       2017-08-10 10:20:04 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2483 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:45 · PVG 12:45 · LAX 20:45 · JFK 23:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.