我做了很多研究,这只会使我更加困惑。问题是,是否在Internet层(IP),传输层(TCP / UDP)或两者都验证了数据包校验和?
谢谢Yan
我用这个作为地址来创建一个新的服务器(socket(),bind(),listen()):
struct sockaddr_in newServer;
memset(&newServer, 0, sizeof(newServer));
newServer.sin_family = AF_INET;
newServer.sin_addr.s_addr = htonl(INADDR_ANY);
newServer.sin_port = htons(UNUSED_PORT);
Run Code Online (Sandbox Code Playgroud)
宏UNUSED_PORT定义为0.
我期望让服务器监听任何接口和未使用的端口.
我试图用来getsockname()获取我的本地IP地址和端口,但我得到了一些奇怪的输出.输出代码如下:
struct sockaddr_in localAddress;
socklen_t addressLength;
getsockname(newServerfd, (struct sockaddr*)&localAddress, \
&addressLength);
printf("local address: %s\n", inet_ntoa( localAddress.sin_addr));
printf("local port: %d\n", (int) ntohs(localAddress.sin_port));
Run Code Online (Sandbox Code Playgroud)
例如,我得到0.255.255.255:0,0.0.0.0:0,255.127.0.0:36237等,我的系统是Mac OS X 10.7.3.
--update--
使用后socklen_t addressLength = sizeof(localAddress);(感谢@cnicutar和@Jonathan Leffler),我总是得到0.0.0.0的本地IP; 那好吗?
我们经常在Web浏览器代理设置中找到地址,端口等列.我知道当我们使用代理访问页面时,Web浏览器从代理服务器请求网页,但我想知道的是整个机制是如何工作的?我观察到许多ISP在我们用完我们的免费数据使用后只允许访问单个IP(他们的网站).但是当我们进入我们想要在代理URL中浏览的站点然后键入允许的IP时,该站点就会被加载.这是怎么回事?
该特定领域的回报是什么?我想要每秒接收的字节数.我应该依靠这个吗?
我正在开发一个通过SNMP协议与嵌入式设备连接的应用程序.为了便于测试,我使用Nodejs和snmpjs库为嵌入式设备编写了一个模拟器.模拟器响应SNMP获取/设置并将陷阱发送到管理应用程序.陷阱消息由snmpjs库构建,但使用Node的标准UDP套接字手动发送.
这在模拟一台设备时效果很好,但在尝试模拟多台设备时遇到了问题.具体地,管理应用程序通过分析携带陷阱的UDP数据包的源IP /端口来识别SNMP陷阱的源设备.这就排除了我同时模拟多个设备,这是应用程序最常见的用例.
所以,我的问题是:有没有办法用Nodejs控制/欺骗udp数据包的源IP或端口?或者,或许可以使用某种代理来实现预期的结果吗?
(注意:在一台机器上运行模拟器是一项严格的要求.另外,我为每个模拟器提供独特的IP /端口是不够的,我必须能够提前知道它们的值,以便我可以配置管理应用程序正确地与它们接口.)
我可以检查一下ip是否在私有网络中吗?
<?php
function isLocalIPAddress($IPAddress)
{
return ( !filter_var($IPAddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) );
}
var_dump( isLocalIPAddress('127.0.0.1') ); // false
var_dump( isLocalIPAddress('192.168.1.20') ); // true
var_dump( isLocalIPAddress('64.233.160.0') ); // false
Run Code Online (Sandbox Code Playgroud)
为什么要isLocalIPAddress('127.0.0.1')给予false而不是true?
127.0.0.1不是私有IP吗?
UPDATE
解决方案我用过:
<?php
function isLocalIPAddress($IPAddress)
{
if( strpos($IPAddress, '127.0.') === 0 )
return true;
return ( !filter_var($IPAddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) );
}
Run Code Online (Sandbox Code Playgroud) 如何将点分十进制格式的IPv4地址转换为数字?例如,地址39.255.2.51应转换为4026466867.
我在计算机上的RoR应用程序上运行了两个版本:一个用于演示(稳定状态,RoR 4.0),另一个用于开发(RoR 4.2).可以使用http:// localhost:3000访问这两个版本.
但我注意到一个恼人的区别:演示版可以从网络上的另一台计算机访问.Dev版本不能.当Dev版本稳定并成为Demo时,这将是一个很大的麻烦.我的客户希望通过wlan在他自己的笔记本电脑上进行测试.
是否有新实施的"防火墙"功能?这是我的宝石之一吗?
如果有人能向我解释这种改变的行为,我会很高兴的!
对于这两种环境,服务器都是Webrick WEBrick 1.3.1.这是我的宝石文件:
开发(无法从另一台计算机访问)
source 'https://rubygems.org'
ruby '2.2.0'
gem 'rails', '~> 4.2.0'
gem 'bootstrap-sass', '~> 3.3.3'
gem 'sass-rails', '~> 5.0.1'
gem 'coffee-rails', '~> 4.1.0'
gem 'uglifier', '~> 2.7'
gem 'bcrypt', '~> 3.1.10'
gem 'jquery-rails', '~> 4.0.3'
gem 'turbolinks', '2.5.3'
gem 'jbuilder', '~> 2.2.6'
gem 'bootstrap-datepicker-rails', '~> 1.3.1'
gem 'will_paginate', '~> 3.0.7'
gem 'bootstrap-will_paginate', '~> 0.0.10'
gem 'selenium-webdriver', '~> 2.44.0'
gem 'sequenced', '~> 2.0.0'
gem 'annotate', '~> 2.6.5'
gem 'rspec-rails', '~> 3.2.0' …Run Code Online (Sandbox Code Playgroud) 我已经尝试arp -a了很多,它列出了一些设备,但不是全部.ifconfig显示我的IP地址和mac地址以及一些其他有用的信息,但它不显示本地网络上的所有设备.是否有显示所有IP地址的命令?
使用Golang(默认HTTP客户端),我无法直接确定处理请求的服务器的IP地址.例如,在请求example.com时,example.com在请求时解析的IP地址是多少?
import "net/http"
resp, err := http.Get("http://example.com/")
Run Code Online (Sandbox Code Playgroud)
resp对象包含resp.RemoteAddr属性,但在客户端操作期间未使用如下所述.
// RemoteAddr allows HTTP servers and other software to record
// the network address that sent the request, usually for
// logging. This field is not filled in by ReadRequest and
// has no defined format. The HTTP server in this package
// sets RemoteAddr to an "IP:port" address before invoking a
// handler.
// This field is ignored by the HTTP client.
RemoteAddr string
Run Code Online (Sandbox Code Playgroud)
有没有直接的方法来实现这一目标?我最初的想法是: