对地址
<img src=http://www.hmttv.cn/uploadfile/2024/1011/20241011084920296.jpg” />
相对地址: ./当前目录 ../向上退一级目录
1、图片和网页在同一个文件夹中
index.html中调用a.jpg
index.html高用a.jpg
我们经常会有需求,希望能获取的到当前用户的IP地址,而IP又分为公网ip(也称外网)和私网IP(也称内网IP),IP地址是IP协议提供的一种统一的地址格式,每台设备都设定了一个唯一的IP地址”,从而确保了用户在连网的计算机上操作时,能够快速地从互联网中找到自己所需的对象。
1,外网IP是全球唯一的IP地址,仅分配给某一台网络设备。内网IP是由路由器分配给每一台设备内部使用的IP地址;
2,外网IP任何一台设备都可以ping通。内网IP只有在同一环境的内部设备才能ping通;
3,外网用户无法直接访问到内网用户,内网用户可以访问外网用户,因为内网的所有用户都是通过同一个外网IP进行上网的;
这里我们可以借助现成的接口,搜狐提供的一个JS接口获取IP地址,我们只需在入口index.html中直接引入该接口即可轻松获取到当前用户的外网ip,Vue中在public中的index.html中引入接口,然后再需要获取的地方通过returnCitySN['cip']即可拿到IP地址,然后将IP存到localstorage或者Vuex中,这样随时可以调用了。
//引入JS <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> //在组件中获取,可以选择在首页载入前获取该参数 var Ip=returnCitySN['cip'] localStorage.setItem('Ip', Ip)
获取内网IP相对来说会复杂些,毕竟没有现成的接口可以调用,这里我们用到了WebRTC(网页即时通信),在WebRTC规范中,RTCPeerConnection可以用于视频流/音频流、以及数据的传输。这里们通过RTCPeerConnection 对象建立一个连接通道,下面3个或对象是针对不同浏览器来创建的。
var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
当RTCPeerConnection对象存在时,我们就可以实例化该对象并创建一个可以发送任意数据的数据通道,此时我们的RTCPeerConnection对象中数据基本都是null。
var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if (RTCPeerConnection) (()=>{ var rtc=new RTCPeerConnection() rtc.createDataChannel(''); //创建一个可以发送任意数据的数据通道 })()
SDP 是一种会话描述格式 ,由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串。SDP中包含了很多媒体信息,包括了媒体类型(video)、传输协议(RTP/UDP/IP)、媒体格式(H.264 video)、多播或单播地址和端口、本端的带宽信息、本端的加密信息等。
我们从要做的就是从SDP中拿到传输协议中的信息,创建一条sdp数据并将数据存入LocalDescription对象中。这样我们在LocalDescription中就得到了所有的SDP数据,从下图中我们可以看到有IP地址在里面,接下来就可以从sdq中提取ip地址了。
rtc.createOffer( offerDesc=> { //创建并存储一条sdp数据 rtc.setLocalDescription(offerDesc) }, e=> { console.warn(e)})
onicecandidate属性在RTCPeerConnection实例上发生icecandidate事件时要调用的函数,当我们向服务器发送消息时触发并获取到SDP中的candidate属性,而candidate中正好有我们想要的IP地址,你可以直接获取var ip_addr=evt.candidate.address。当然你也可以从candidate属性中获取,不过这里就会复杂点,用个正则来提取吧(显然方法一简单)。
rtc.onicecandidate=(evt)=> { //监听candidate事件 if (evt.candidate) { //方法一: var ip_addr=evt.candidate.address //方法二: let ip_rule=/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/. var ip_addr=ip_rule.exec(evt.candidate.candidate)[1] console.log("ip_addr==",ip_addr) }}
最后整理下代码,封装成一个方法需要的时候直接调用即可,通过localStorage来存储获取到的ip_addr(或者Vuex存储),然后我们只需要通过localStorage.getItem('ip_addr'))就可以获取到我们的内网IP地址了。
getUserIP(){ var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if (RTCPeerConnection) (()=>{ var rtc=new RTCPeerConnection() rtc.createDataChannel(''); //创建一个可以发送任意数据的数据通道 rtc.createOffer( offerDesc=> { //创建并存储一个sdp数据 rtc.setLocalDescription(offerDesc) }, e=> { console.log(e)}) rtc.onicecandidate=(evt)=> { //监听candidate事件 if (evt.candidate) { var ip_addr=evt.candidate.address localStorage.setItem('ip_addr',ip_addr) }} })() else{console.log("目前仅测试了chrome浏览器OK")} }
欢迎关注本人的公众号:编程手札,文章也会在公众号更新
辑导语:前段时间,有很多博主因为IP属地问题“翻车”,而是否展示IP属地也引发了广大网友的讨论。为什么各大平台突然集体展示账号IP属地?这项功能有什么意义?本篇文章中,作者给出了答案,我们一起来看看吧。
最近,各大平台网站陆续公开了账号IP属地。对于这项新的政策,网上主流观点都持支持态度。为什么突然间各大平台网站很有默契的同时开发且执行了公开账号IP属地这项功能,这对产品设计工作会有怎样的影响,在这里一站式分享与你。
关于IP属地展示,最早提出是为了网络言论的实名化,即通过展示言论属地IP来对不良网络言论行为进行威慑,达到清朗网络环境的目的。
所以国家互联网信息办公室在2010年10月提出《互联网用户账号名称信息管理规定(征求意见稿)》,其中十二条明确规定:
“互联网用户账号服务平台应当以显著方式,在互联网用户账号信息页面展示账号IP地址属地信息。境内互联网用户账号IP地址属地信息需标注到省(区、市),境外账号IP地址属地信息需标注到国家(地区)。”
但这里需要注意,这是一个征求意见稿,所以并不是本次执行的法规依据。
通俗地讲就是问问大家意见,这样规定行不行,如果觉得不行那再修改修改。
虽然不是执行文件,但是也表达了国家对IP展示方案的意向。
而此次各大平台突然开发展示账户IP属地的真正原因是今年4月中央网信办开展的“清朗·网络暴力专项治理行动”
总而言之,目前并未有强制的法规要求平台系统对账号做地域展示,目前的展示主要也是用于响应国家关于网络环境的相关号召,或者是一种试运行状态。
既然没有要求,那知道这些对我们是否还有意义?
既然主流的内容平台都已经上线此功能,那么在各种需求会议上和日常工作交流中就有可能会被不经意地提及。
虽然不是复杂的需求,但也是需求,是需求就需要处理。
而全面了解此功能的背景与现状是我们从容应对需求的基础,同时也能表现自己的产品全面性与专业性,因为功能小,所以容易因扩展的回答制造惊喜。
不知道大家是否有这样的经历,在规划产品或者项目的时候,难免会遇到一道填空题,一道关于风险的填空题。
填的太真实,影响项目立项或者推进,填的太敷衍,容易被diss说没经验;假如选择抄取前辈的“答案”,又担心前辈变成评审会的参与方。
而现在就有一个现成的答案,既能政治正确又没啥成本。
说到成本,我想为了各项合规而开发的功能中,展示IP是相对成本小的一个功能,甚至大部分系统的会员数据里面本来就拥有IP数据,甚至还有定位数据,而且还不用改变业务流程。
小成本功能是能很好地增加产品的灵活性。
关于网络环境治理,只会越来越规范。
关于IP属地展示规定的试水,目前的主流观点是持支持态度,所以大概率我们还是会迎来需要强制展示IP归属地的那一天,就像现在的域名备案一样成为常态化硬性要求。
我整理了、知乎、贴吧、小红书和快手的功能对比,总结下来主要是在三个位置做IP属地的展示,分别是【作者主页】、【文章页】、【评论区】,详细情况我已分别对上述各个平台做了截图介绍。
同样是展示功能,各个平台对于展示这件事的解释有各自的理解:
IP属地展示的数据源是来自于系统对用户发生行为的时候获取的IP地址数据进行展示,所以主要分为两种:
(1)博主IP
博主IP位置数据:根据账号注册时的IP属地进行存储展示,即在博主注册但未发表作品的状态下展示对应的IP位置,后期根据发布作品时的IP位置做对应的统计得出博主IP位置。主要参考的逻辑是在设定的时间段内作品发布时的IP统计和注册IP属地加权计算取值。
(2)作品和评论IP
用户作品和评论的IP来源则是根据发布时的实际IP地址归属获取并展示。
(1)博主IP
关于博主IP,目前看下来大家主要是以完成功能为主,但是值得参考的是快手的实践。
快手将用户自己设置的地址与IP地址结合,在主页面是展示省份+城市。
但是这个数据其实是博主自己设置的数据,点击进去则会展示IP地址与博主自己设置的地址。
正常情况下用户查看时两个数据是对应的,如果有不诚实的情况,则也暴露的很明显。而且其他的平台主要还是在博主信息区对地址做展示。
(2)作品IP
目前看到的所有的作品详情页关于IP地址的展示都是不明显的,但是这很合理,因为用户进来看的是内容又不是定位信息。
对于文章类的就两个思路,一种是在文章头部展示,另一种是在文章尾部做展示,基本做到页面和谐即可。
(3)评论IP
关于评论IP属地的展示,各个平台的展示思路高度一致,在原来页面展示评论时间的后面直接追加对应的IP属地,省力又和谐。
IP属地的展示深度只能到省份级别,直辖市则展示城市名。
用户解释文案:
截止至我发文的时间,IP属地展示功能了解即可,如果未来刚好遇到的真的要上这个功能,那希望也能为你提供一点点帮助。
参考资料:
1、中央网信办:http://www.cac.gov.cn/2022-04/24/c_1652422681278782.html
2、国家互联网信息办公室官网:http://www.cac.gov.cn/2021-10/26/c_1636843202454310.html
本文由 @瑞见钉锤 原创发布于人人都是产品经理,未经许可,禁止转载。
题图来自 Unsplash,基于CC0协议
*请认真填写需求信息,我们会在24小时内与您取得联系。