我目前正在我的网络上运行两个后端服务器,并在Windows上与Nginx进行负载平衡.
我正在加载测试系统,但是我的所有流量都指向一台服务器.这是因为ip_hash算法按前3个八位字节对流量进行排序,即111.222.333.XXX
这是一个问题,因为我瞄准服务器的所有流量都具有相同的基地址(相同的前3个八位字节),因此我的流量都不会转到另一个服务器.有没有人知道修补或更改ip_hash算法以过滤4个八位字节的方法.
谢谢
我正在使用Python脚本将UDP数据包发送到服务器,该服务器将注册我的脚本以接收来自服务器的通知.该协议要求我发送自己的IP地址和端口,我希望收到这些通知,因此这应该是可以从服务器网络访问的地址.
解决方案至少应该适用于Windows XP及更高版本,最好是Mac OS X,因为这是我的开发平台.
第一步是获取任何接口的IP地址.我目前正在使用通常建议的解析机器自己的主机名的方法:
def get_local_address():
return socket.gethostbyname(socket.gethostname())
Run Code Online (Sandbox Code Playgroud)
这有时只能起作用.目前它返回172.16.249.1,这是VM Ware使用的虚拟接口的地址,所以这是一个问题.
更好的方法是获取默认接口的IP地址,这在大多数时候应该是正确的.
更好的方法是通过面向连接的协议(如TCP)获取用于连接服务器的实际IP地址.我实际上可以获得该地址,但不是在没有尝试打开连接的情况下:
def get_address_to_connect_to(server_addr):
non_open_port = 50000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((server_addr, non_open_port))
except socket.error:
pass
else:
s.close() # just in case
return s.getsockname()[0]
Run Code Online (Sandbox Code Playgroud)
在服务器无法访问或其间的恶意防火墙阻止ICMP数据包的情况下,这将阻止直到达到某个TCP超时.有没有更好的方法来获取这些信息?
我在PHP中创建了一个小型IP:PORT scraper.问题是我对RegEx很不熟悉.
所以我一直在拼凑我能做的事情.
这是我得到的:
/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):([0-9]{1,5})\b/
我知道这不是最好的.至少不是最终抓住端口,因为这意味着端口将能够像99999这样的东西.
此外,它似乎以这种方式返回两个匹配.IP:PORT和PORT.我只需要它来获取完整的IP:PORT,而不是其中一个.
互联网上有大量的服务,我们可以找到我们机器的外部IP地址,但这些服务通常提供有关互联网提供商或国家(或两者)的信息.
所以我的问题是:我怎样才能以编程方式获取这些信息知道IP地址?是否有一些公共目录或某些API用于检索此类信息?
我们在Unicorn + Nginx上运行Rails应用程序.服务器有两个我们使用的NIC.eth0处理对公共互联网的eth2请求,并处理来自我们专用网络的请求.
当请求通过时eth0,nginx日志显示公共IP,Rails日志也显示此IP.但是,当请求通过时eth2,nginx日志会正确显示私有IP(例如192.168.5.134),但Rails日志会显示127.0.0.1.
因此,似乎公共请求正确设置eth0了X-Forwarded-For标头,但是对于请求没有发生这种情况eth2.
我们的nginx配置非常基本:
upstream example.com {
server unix://var/www/example.com/shared/sockets/unicorn.socket fail_timeout=0;
}
...
server {
listen 443 ssl;
...
location @example.com {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real_IP $remote_Addr;
proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if ($host ~* "^(.+)\.example.com$") {
set $subdomain $1;
}
proxy_pass http://example.com;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
哈斯克尔network小号HostAddress说:"网络字节顺序",在它的文档
但是,如果我以网络字节顺序(big-endian)传递地址,它的show instance打印错误的地址:
Prelude Network.Socket> :m + Network.Socket Data.Bits
Prelude Network.Socket Data.Bits> SockAddrInet (fromInteger 50) (192 `shiftL` 24)
0.0.0.192:50
Prelude Network.Socket Data.Bits>
Run Code Online (Sandbox Code Playgroud)
这是预期的吗?为什么它会打印小端的东西?我应该以大端还是小端格式传递IP地址?
如何使用WebRTC获取本地客户端IP .
我不需要REMOTE_ADDR客户端,而是他的本地网络IP.我之前在网站上看过这个sharedrop.com,它使用WebRTC识别同一网络中的计算机.
在PHP中,我这样做是为了让客户端远程IP:
<?php
echo $_SERVER["REMOTE_ADDR"]; // which would return 72.72.72.175
?>
Run Code Online (Sandbox Code Playgroud)
我查看了stackoverflow,但每个问题都是使用远程地址解决的.
如何使用JavaScript而不是远程地址获取本地IP(例如192.168.1.24).
我要实现从溶液WinApp写C#来PHP.我需要提取IP基于host name.下面的代码完美地运行:
IPHostEntry LocalHostIPEntry = Dns.GetHostEntry(hostname);
IPAddress LocalHostIP = LocalHostIPEntry.AddressList[0];
string ipfromhost = LocalHostIP.ToString();
Run Code Online (Sandbox Code Playgroud)
我到目前为止唯一的选择PHP是:
gethostbyname('hostname');
Run Code Online (Sandbox Code Playgroud)
但是IP对于同一主机而言,返回的C#代码与代码不同.此外,IP它返回不正确.如果我使用相关主机检查,nslookup -IPaddress-那么我得到一个完全不同的主机名.
这是怎么回事?还有什么其他方法可用于查找IP的host网络上使用PHP?
我有一个 CloudFormation 模板,可以为 RStudio Server 启动 EC2 实例。
AWSTemplateFormatVersion: 2010-09-09
Description: Sets up an RStudio and Shiny environment on AWS
Parameters:
InstanceType:
Type: String
Description: Instance type for RStudio. Default is t2.micro.
AllowedValues:
- t2.micro
- t2.small
- t2.medium
- t2.large
- t2.xlarge
- t2.2xlarge
- m4.large
- m4.xlarge
- m4.2xlarge
- m4.4xlarge
- m4.10xlarge
- m4.16xlarge
- c4.large
- c4.xlarge
- c4.2xlarge
- c4.4xlarge
- c4.8xlarge
- r4.large
- r4.xlarge
- r4.2xlarge
- r4.4xlarge
- r4.8xlarge
- r4.16xlarge
- …Run Code Online (Sandbox Code Playgroud) 如果您使用命令:
docker network ls
Run Code Online (Sandbox Code Playgroud)
您将得到列出所有 Docker 网络的输出,但缺少这些网络的 IP 范围。
如何获取所有创建的子网IP范围?
例如,如果我使用命令:
docker network create --subnet 172.31.0.1/16 --internal network-one
docker network create --subnet 173.31.0.1/16 --internal network-two
Run Code Online (Sandbox Code Playgroud)
我想获取包含的地址范围列表
172.31.0.1/16
173.31.0.1/16
Run Code Online (Sandbox Code Playgroud)
如果我能够以 CLI 输出格式获取列表,那就完美了:
network-one 172.31.0.1/16
network-two 173.31.0.1/16
...
Run Code Online (Sandbox Code Playgroud)
所以我可以将它作为 Bash 数组加载,并稍后逐行解析它或通过管道传输到另一个 CLI 命令。