在某个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用于提供远程服务,以供外部访问