我需要确定给定的IP地址是否来自某个特殊网络,我必须自动进行身份验证.
我到处搜索,但他们的解决方案需要某种形式的IP地址.以下是我找到的解决方案.
require 'socket'
#METHOD 1
ip = IPSocket.getaddress(Socket.gethostname)
puts ip
#METHOD 2
host = Socket.gethostname
puts host
#METHOD 3(uses Google's address)
ip = UDPSocket.open {|s| s.connect("64.233.187.99", 1); s.addr.last}
puts ip
#METHOD 4(uses gateway address)
def local_ip
orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily
UDPSocket.open do |s|
s.connect '192.168.1.1', 1
s.addr.last
end
ensure
Socket.do_not_reverse_lookup = orig
end
ip=local_ip
puts ip
Run Code Online (Sandbox Code Playgroud)
所有这些都需要某人的IP地址.有没有使用别人的IP地址的解决方案?优选地,平台无关.
我找到了一些在servlet中获取ip的不同方法.但我不知道哪一个是正确的,为什么.
1:
request.getHeader( "X-Real-IP" )
Run Code Online (Sandbox Code Playgroud)
2:
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) …Run Code Online (Sandbox Code Playgroud) 我的服务器软件errno99: cannot assign requested address在使用除127.0.0.1绑定之外的IP地址时说.
但如果IP地址是127.0.0.1有效的.它与命名空间有关吗?
我通过调用在另一个python程序中执行我的服务器和客户端代码execfile().我实际上正在编辑mininet源代码.我编辑了net.py,在里面我使用了execfile('server.py')execfile('client1.py')和execfile('client2.py').所以一旦" sudo mn --topo single,3"被调用以及3个主机的创建我的服务器和客户端代码将被执行.我已经给出了我的服务器和客户端代码.
#server code
import select
import socket
import sys
backlog = 5
size = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("10.0.0.1",9999))
server.listen(backlog)
input = [server]
running = 1
while running:
inputready,outputready,exceptready = select.select(input,[],[])
for s in inputready:
if s == server:
client, address = server.accept()
input.append(client)
else:
l = s.recv(1024)
sys.stdout.write(l)
server.close()
Run Code Online (Sandbox Code Playgroud)
#client code
import socket
import select
import sys
import time
while(1) …Run Code Online (Sandbox Code Playgroud) 我如何获得我的本地IpAddress?
我试着用这个Obj C例子:如何以编程方式获取iphone的ip地址
当我进入该功能时,getifaddrs()我无法进一步.我无法使用该功能.
有没有其他方法可以做到这一点,或者我是以错误的方式接近这个?
我在查找关于第三个参数的这些设置之间的区别的文档时遇到了一些麻烦socket.我知道TCP和UDP及其差异以及IP是堆栈上的一层(向下?)...我的UDP代码似乎工作相同,无论我将其设置为IPPROTO_IP或IPPROTO_UDP.
这里我有一个静态参考我需要检查的范围:
private static List<string> Ip_Range = new List<string>()
{
"12.144.86.0/23",
"31.201.1.176/30",
"46.36.198.101/32",
"46.36.198.102/31",
"46.36.198.104/31",
"46.136.172.0/24",
"63.65.11.0/24",
"63.65.12.0/25",
"63.65.12.128/26",
"63.65.12.192/27",
"63.65.12.224/28",
"63.65.12.240/29",
"63.65.12.248/30",
"63.65.12.252/31",
"63.65.12.254/32",
"65.173.56.0/21",
"67.23.241.179/32",
"67.23.241.180/30",
"67.23.241.184/29",
"67.23.241.192/30",
"67.23.241.196/31",
"67.23.241.198/32",
"72.32.164.56/29",
"72.46.244.32/28",
"74.91.16.48/29",
"74.91.16.208/29",
"74.91.20.48/28",
"74.91.20.64/29",
"74.112.134.120/29",
"74.112.135.104/29",
"74.205.37.16/29",
"78.24.205.32/28",
"98.129.27.88/29",
"98.129.91.40/29",
"166.114.0.0/16",
"167.157.0.0/16",
"174.143.165.80/29",
"186.0.156.0/22",
"186.2.0.0/17",
"186.27.0.0/17",
"190.0.248.0/21",
"190.3.184.0/21"
};
Run Code Online (Sandbox Code Playgroud)
这是我看到它如何工作的一些伪代码:
public static bool IpIsWithinRange(string ip) //Something like 127.0.0.1 or 184.56.26.35
{
IPAddress incomingIp = IPAddress.Parse(ip);
foreach (var subnet in Ip_Range)
{
IPAddress sub = IPAddress.Parse(subnet); ?????
if …Run Code Online (Sandbox Code Playgroud) 我知道Google App Engine不支持具有静态IP地址的应用程序,但我想知道应用程序可能具有的列表或IP地址范围?我想将该列表用作其他地方部署的其他应用程序的IP地址白名单.
我正在尝试开发一个Java Web应用程序(Servlet),我需要获取客户端的IP地址.
请不要将此视为重复问题,因为我尝试了stackoverflow中可用的所有可能答案.
以下是我的代码到目前为止:
1)
String ipAddress = request.getRemoteAddr();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我获得了"默认网关地址"(147.120.1.5).不是我的机器IP地址(174.120.100.17).
2)
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我获得了"默认网关地址"(147.120.1.5).不是我的机器IP地址(174.120.100.17).
3)
InetAddress IP=InetAddress.getLocalHost();
System.out.println(IP.getHostAddress());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到了服务器IP地址(147.120.20.1).
我在147.120.100.17中的IP地址.现在我不知道如何获取真正的客户端IP地址.请回答.
非常感谢你.