验证用户输入的IP有效的最佳方法是什么?它以字符串形式出现.
是否有来自某个大公司的公共API来从程序中获取我的公共IP?
我发现http://ip-address.domaintools.com/myip.xml,这正是我想要的,但不幸的是它阻止了Python urllib以及许多其他的http库,除非你欺骗用户代理(任何做这件事的东西都不能称为API).
问题是我需要这些数据用于一些潜在的开源库,所以我们必须遵守规则.我也知道我可以做类似的事情print $_SERVER[REMOTE_ADDR],但我不想使用我的库为所有人提供流量服务.
那么,是否有类似上面的URL,但真正的API,允许机器人?
寻找一种更好的方法来获取机器当前的外部IP#...下面工作,但宁愿不依赖外部网站来收集信息......我只能使用与Mac OS捆绑在一起的标准Python 2.5.1库X 10.5.x
import os
import urllib2
def check_in():
fqn = os.uname()[1]
ext_ip = urllib2.urlopen('http://whatismyip.org').read()
print ("Asset: %s " % fqn, "Checking in from IP#: %s " % ext_ip)
Run Code Online (Sandbox Code Playgroud) 我在小型网络上有一台电脑,所以我的IP是192.168.2.100.
我想要获得真正的IP.我下载了no-ip客户端,但这对于这么简单的事情来说似乎很麻烦.
我创建了这个php脚本,它获得了http://www.ip-adress.com/ page并检索了它给我的ip.
有更简单的方法吗?使用C,WSH或其他东西.或者,如果有一个更简单的PHP方式请告诉我.
当我拿到ip时,我会将它上传到我的ftp网站,以便我可以看到ip从工作中.
可能重复:
使用Python的stdlib查找本地IP地址
我怎样才能得到我的IP地址?
socket.gethostbyname( socket.gethostname() )
Run Code Online (Sandbox Code Playgroud)
这是返回127.0.1.1,但我怎样才能获得真正的IP?
对于两台主机之间的通信,我需要将主机的IP地址发送到另一个站点.问题是,如果我请求我的IP地址,可能是我恢复了我的本地环回IP地址(127.xxx),而不是网络(以太网)IP地址.
我使用以下代码:
char myhostname[32];
gethostname(myhostname, 32);
hp = gethostbyname(myhostname);
unsigned my_ip = *(unsigned*)(hp->h_addr);
if( (my_ip % 256) == 127) {
/* Wrong IP adress as it's 127.x.x.x */
printf("Error, local IP address!");
return;
}
Run Code Online (Sandbox Code Playgroud)
解决它的唯一方法是确保/ etc/hosts中的主机名在真实网络地址后面,而不是本地环回(例如Ubuntu的默认值).
有没有办法解决这个问题而不依赖于/ etc/hosts的内容?
编辑:我改变了上面的代码,所以它使用getaddrinfo,但我仍然得到回送设备的号码(127.0,0,1)而不是真正的IP地址:
struct addrinfo hint = {0};
struct addrinfo *aip = NULL;
unsigned ip = 0;
struct sockaddr_in *sinp = NULL;
hint.ai_family = AF_INET; /* IPv4 */
hint.ai_socktype = SOCK_STREAM;
if(getaddrinfo(hostname, NULL, &hint, &aip) != 0) {
return 0;
}
sinp = …Run Code Online (Sandbox Code Playgroud)