在某个ip上开放某个端口是什么意思?

端口绑定IP有什么用?
127.0.0.1和0.0.0.0的区别?

例如使用flask开发web应用时,可以指定ip(默认127.0.0.1)和端口(默认5000)

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World'

if __name__ == '__main__':
   app.run("127.0.0.1", 5000)

此时,我们就在127.0.0.1上开放了5000端口,然后我们就可以通过127.0.0.1:5000的形式在浏览器上访问web应用

当然我们可以在别的本机上拥有的ip上开放别的端口,比如

if __name__ == '__main__':
   app.run("192.168.137.1", 80)

此时,我们就在192.168.137.1上开放了80端口,然后我们就可以通过192.168.137.1:80的形式在浏览器上访问web应用

192.168.137.1是我本机的某一个ip地址。一台主机可以拥有多个ip地址,不仅仅是因为可以有多张网卡,大多数的ip地址是操作系统虚拟出来的,有着各自的用途。

在windows上使用ipconfig命令可以查看所有ip及其对应的网卡

在linux上使用ifconfig或者ip addr命令


此外,还有一些特殊的ip地址,例如

{0,0}:网络号和主机号都全部为0,表示“本网络上的本主机”,也表示不确定的来源,只能用作 源地址(不能ping它)
...
...
{127,}:即网络号为127的任意ip地址。都是内部主机回环地址(loopback),永远都不能出现在主机外部的网络中。


显然,不是你本机的ip你肯定是不能用的。

那既然都是只能绑定本机的ip,还提供什么可选ip的功能干吗?

在某个ip上开放端口,其实是借用了局域网的特性,来限制别人对端口的访问。

比如我在192.168.137.1/16上开放端口,那么只有我自己和同属于192.168.0.0网段的机器能访问到我的ip,也就起到了限制端口访问的作用了。

那在127.*.*.*上开放端口就变成了只有自己能访问了

在0.0.0.0上开放端口意思就是允许任何ip访问此端口


在开发的过程中,127.0.0.1用于提供本地服务,以供本地的其他应用程序使用

0.0.0.0用于提供远程服务,以供外部访问

posted @ 2021-04-16 15:34  jawide  阅读(2098)  评论(0编辑  收藏  举报