V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
douglas1997
V2EX  ›  分享创造

一个简单的终端搭建局域网 HTTP server 的脚本

  •  
  •   douglas1997 · 2017-12-07 09:27:04 +08:00 · 4119 次点击
    这是一个创建于 2548 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景描述:

    1. MacOS 在已共享 WiFi 网络的时候无法使用 AirDrop,导致传单个文件很稀烂
    2. 局域网的 IP 地址变化多端,可能是自己获得的公网 IP,也可能是内网 IP,手动输入很麻烦
    3. 这个脚本非常简单,只是最近想到用二维码的方法,就分享一下
    

    效果如下:

    大家可以自己试用。

    gist code

    第 1 条附言  ·  2017-12-07 11:02:33 +08:00
    已增加上传功能,感谢 @bashbot

    进来的点个下沉吧,v2 的朋友们大多不喜欢看帖,总想着表达自己。

    我只是觉得这个想法很有意思,就分享了。
    第 2 条附言  ·  2017-12-07 13:33:32 +08:00
    噗。。怎么上热贴了,下次发个有技术含量的吧。干活去了。

    谢谢各位观光~
    29 条回复    2017-12-07 13:31:37 +08:00
    amu
        1
    amu  
       2017-12-07 09:30:51 +08:00
    ??? python -m SimpleHTTPServer
    douglas1997
        2
    douglas1997  
    OP
       2017-12-07 09:31:24 +08:00
    @amu 不显示 IP,还要自己输入,很麻烦
    BOYPT
        3
    BOYPT  
       2017-12-07 09:44:52 +08:00
    os.system("qrencode "+httpip + " &") (滑稽)
    wwqgtxx
        4
    wwqgtxx  
       2017-12-07 09:53:10 +08:00
    干嘛不发布到 pypi 呢
    douglas1997
        5
    douglas1997  
    OP
       2017-12-07 09:57:03 +08:00
    @wwqgtxx 哈哈哈太简单了,并且这个是有依赖项的。最近在搞其他的工程,这个就是顺手写的,就放到 gist 上吧。
    douglas1997
        6
    douglas1997  
    OP
       2017-12-07 09:57:47 +08:00
    @BOYPT Mac 共享 WiFi 的时候那个 IP 地址我输的时候内心真是 bi le gou le。
    bashbot
        7
    bashbot  
       2017-12-07 10:32:03 +08:00
    ??? python -m SimpleHTTPServer

    这个 python 自带的呀,为啥要这么麻烦?
    这个只能下载文件,给一个增加了上传文件功能的
    https://raw.githubusercontent.com/colbot/python3learning/master/HttpServer/httpServer.py
    bashbot
        8
    bashbot  
       2017-12-07 10:35:35 +08:00
    把楼主的场景描述阅读了三遍,终于 get 到楼主的点了:

    **手动输 IP 太麻烦,采用二维码传递 URL 信息**

    我电脑常年多个网络工作,楼主这个代码能生成多个二维码么,还是怎么处理。
    falcon05
        9
    falcon05  
       2017-12-07 10:45:13 +08:00 via iPhone
    这个终端二维码可以的😄
    douglas1997
        10
    douglas1997  
    OP
       2017-12-07 10:47:29 +08:00
    @bashbot 你的代码写的很漂亮,之前我有用过一个 python2.7 的,但是对于 http 库不熟。感谢分享代码,已 merge。
    amu
        11
    amu  
       2017-12-07 10:47:38 +08:00
    @douglas1997 其实我准确的使用场景为

    alias myip="ifconfig |grep inet |grep 192| awk '{print $2}'"
    alias sharefile="myip && python -m SimpleHTTPServer 8001"

    二维码感觉很鸡肋,PC 之间无法使用
    lululau
        12
    lululau  
       2017-12-07 10:49:51 +08:00
    两台电脑之间通过二维码之别信息也很麻烦吧。。。
    如果都用 Mac 的话,可以用 Bonjour Hostname 互相访问:

    http://zhangsandeMacbook.local:8080/
    lululau
        13
    lululau  
       2017-12-07 10:52:24 +08:00
    获取 Bonjour LocalHostName:

    scutil --get LocalHostName

    后面再加上 .local 就可以了
    douglas1997
        14
    douglas1997  
    OP
       2017-12-07 10:55:05 +08:00
    @lululau 嗯好主意,之前还没注意到。我这边主要连公网服务器工作,局域网用的特别少。现在正好 iOS11 也有相机直接扫描出二维码的功能。
    douglas1997
        15
    douglas1997  
    OP
       2017-12-07 10:58:44 +08:00 via iPhone
    @amu 额,看来你都没看我的帖子 hh。都行吧,我觉得场景很多,PC 端我一般用 smb。
    douglas1997
        16
    douglas1997  
    OP
       2017-12-07 11:00:16 +08:00 via iPhone
    @bashbot 这个是一个库,qrencode。别人写的,自己写的有问题,效果比较差。好像也是 v2 的朋友写的。
    wlh233
        17
    wlh233  
       2017-12-07 11:34:59 +08:00
    想法很有意思
    curl ifconfig.me | awk '{printf "http://%s:8000", $1}' | qrencode -t UTF8 && python3 -m http.server
    douglas1997
        18
    douglas1997  
    OP
       2017-12-07 11:35:53 +08:00
    @wlh233 如何指定地址呢?我觉得指定地址也是非常重要的。
    tuimaochang
        19
    tuimaochang  
       2017-12-07 11:50:44 +08:00
    哎呦握草,你他娘的简直是个天才……(请自己脑补李云龙脸)
    jadec0der
        20
    jadec0der  
       2017-12-07 11:53:42 +08:00
    不错不错,其实蛮有用的,我常年 python -m SimpleHTTPServer 8000 然后还要 ifconfig 看 ip
    ifaii
        21
    ifaii  
       2017-12-07 12:12:04 +08:00   ❤️ 1
    @bashbot 首行建议改为 #!/usr/bin/env python3 , 我在 macos 上直接出错了
    douglas1997
        22
    douglas1997  
    OP
       2017-12-07 12:15:58 +08:00 via iPhone
    @tuimaochang 😂哈哈哈
    ifaii
        23
    ifaii  
       2017-12-07 12:16:58 +08:00
    @douglas1997 bug

    ~/work $ ./httpserver_fillcap.py . 8000
    Traceback (most recent call last):
    File "./httpserver_fillcap.py", line 117, in get_wirelessip
    wirelessip = ni.ifaddresses(interf)[ni.AF_INET][0]['addr']
    KeyError: 2

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "./httpserver_fillcap.py", line 162, in <module>
    wirelessip = get_wirelessip("en0")
    File "./httpserver_fillcap.py", line 119, in get_wirelessip
    wirelessip = get_ip_address()
    File "./httpserver_fillcap.py", line 124, in get_ip_address
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    NameError: name 'socket' is not defined
    douglas1997
        24
    douglas1997  
    OP
       2017-12-07 12:19:56 +08:00 via iPhone
    @ifaii sorry,I will fix it ASAP.
    loading
        25
    loading  
       2017-12-07 12:43:26 +08:00 via Android
    很好,找个时间试着写个 golang 的。
    douglas1997
        26
    douglas1997  
    OP
       2017-12-07 12:48:54 +08:00
    @ifaii Fixed.
    douglas1997
        27
    douglas1997  
    OP
       2017-12-07 12:49:44 +08:00
    @loading 大佬回帖了= = 谢谢~
    hu6360567
        28
    hu6360567  
       2017-12-07 13:28:40 +08:00 via iPhone
    支持 range 吗?
    douglas1997
        29
    douglas1997  
    OP
       2017-12-07 13:31:37 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:54 · PVG 04:54 · LAX 12:54 · JFK 15:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.