爱意满满的作品展示区。
douglas1997

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

  •  
  •   douglas1997 · Dec 7, 2017 · 4996 views
    This topic created in 3255 days ago, the information mentioned may be changed or developed.

    场景描述:

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

    效果如下:

    大家可以自己试用。

    gist code

    Supplement 1  ·  Dec 7, 2017
    已增加上传功能,感谢 @bashbot。

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

    我只是觉得这个想法很有意思,就分享了。
    Supplement 2  ·  Dec 7, 2017
    噗。。怎么上热贴了,下次发个有技术含量的吧。干活去了。

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

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

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

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

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

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

    http://zhangsandeMacbook.local:8080/
    lululau
    lululau
    Dec 7, 2017
    13
    获取 Bonjour LocalHostName:

    scutil --get LocalHostName

    后面再加上 .local 就可以了
    douglas1997
    douglas1997
    OP
    Dec 7, 2017
    14
    @lululau 嗯好主意,之前还没注意到。我这边主要连公网服务器工作,局域网用的特别少。现在正好 iOS11 也有相机直接扫描出二维码的功能。
    douglas1997
    douglas1997
    OP
    Dec 7, 2017 via iPhone
    15
    @amu 额,看来你都没看我的帖子 hh。都行吧,我觉得场景很多,PC 端我一般用 smb。
    douglas1997
    douglas1997
    OP
    Dec 7, 2017 via iPhone
    16
    @bashbot 这个是一个库,qrencode。别人写的,自己写的有问题,效果比较差。好像也是 v2 的朋友写的。
    wlh233
    wlh233
    Dec 7, 2017
    17
    想法很有意思
    curl ifconfig.me | awk '{printf "http://%s:8000", $1}' | qrencode -t UTF8 && python3 -m http.server
    douglas1997
    douglas1997
    OP
    Dec 7, 2017
    18
    @wlh233 如何指定地址呢?我觉得指定地址也是非常重要的。
    suntoryliqu
    suntoryliqu
    Dec 7, 2017
    19
    哎呦握草,你他娘的简直是个天才……(请自己脑补李云龙脸)
    jadec0der
    jadec0der
    Dec 7, 2017
    20
    不错不错,其实蛮有用的,我常年 python -m SimpleHTTPServer 8000 然后还要 ifconfig 看 ip
    ifaii
    ifaii
    Dec 7, 2017❤️1
    21
    @bashbot 首行建议改为 #!/usr/bin/env python3 , 我在 macos 上直接出错了
    douglas1997
    douglas1997
    OP
    Dec 7, 2017 via iPhone
    22
    @tuimaochang 😂哈哈哈
    ifaii
    ifaii
    Dec 7, 2017
    23
    @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
    douglas1997
    OP
    Dec 7, 2017 via iPhone
    24
    @ifaii sorry,I will fix it ASAP.
    loading
    loading
    Dec 7, 2017 via Android
    25
    很好,找个时间试着写个 golang 的。
    douglas1997
    douglas1997
    OP
    Dec 7, 2017
    26
    @ifaii Fixed.
    douglas1997
    douglas1997
    OP
    Dec 7, 2017
    27
    @loading 大佬回帖了= = 谢谢~
    hu6360567
    hu6360567
    Dec 7, 2017 via iPhone
    28
    支持 range 吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2733 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 13:55 · PVG 21:55 · LAX 05:55 · JFK 08:55
    ♥ Do have faith in what you're doing.