在这篇文章中,我们将带领您了解如何从打开的TCPConn*中检索IP地址?的全貌,包括如何查找tcpip地址的相关情况。同时,我们还将为您介绍有关Android:如何知道IP地址是WifiIP地址?、
在这篇文章中,我们将带领您了解如何从打开的TCPConn *中检索IP地址?的全貌,包括如何查找tcp ip地址的相关情况。同时,我们还将为您介绍有关Android:如何知道IP地址是Wifi IP地址?、awk – 如何从日志文件中获取IP地址?、iPhone/iPad/OSX:如何以编程方式获取IP地址?、jNetPcap怎么根据IP地址获得MAC地址?的知识,以帮助您更好地理解这个主题。
本文目录一览:- 如何从打开的TCPConn *中检索IP地址?(如何查找tcp ip地址)
- Android:如何知道IP地址是Wifi IP地址?
- awk – 如何从日志文件中获取IP地址?
- iPhone/iPad/OSX:如何以编程方式获取IP地址?
- jNetPcap怎么根据IP地址获得MAC地址?
如何从打开的TCPConn *中检索IP地址?(如何查找tcp ip地址)
我有一个从TCPListener.acceptTCP接受的TCPConn
*。我只想获取IP地址(无端口信息)作为字符串或IP。什么是正确的方法(即最少的转换/字符串操作)?
答案1
小编典典要获得IP,作为IP对象,最直接的方法应该是
tcpconn.RemoteAddr().(*net.TCPAddr).IP
使用类型断言没有错,在这种情况下,这实际上是预期的。
Android:如何知道IP地址是Wifi IP地址?
我想知道Android设备的IP地址是数据IP还是Wifi IP。
1)首先将设备连接到3G,然后将设备分配给网络IP。
2)之后将设备连接到WIFI,现在该设备将分配给WIFI IP。
3)任何可以让我们知道IP地址是Wifi IP地址还是网络IP的Android API?
在2.3.5中使用了下面的代码,一切都很好,但是在4.0.3中,ICS存在一些问题。
/**
* Is the IP Address a a Wifi Ip Address.
* @param ipAddr
* @return boolean
*/
public boolean isWifiIp(byte[] ipAddr){
try{
WifiManager mgr = (WifiManager)mCxt.getSystemService(Context.WIFI_SERVICE);
int wifiIP = mgr.getConnectionInfo().getIpAddress();
int reverseWifiIP = Integer.reverseBytes(wifiIP);
int byteArrayToInt = byteArrayToInt(ipAddr,0);
if(byteArrayToInt == wifiIP || byteArrayToInt == reverseWifiIP)
return true;
}catch (Exception e) {
Logger.d(TAG,e);
}
return false;
}
/**
* Convert IP Address in bytes to int value.
* @param arr
* @param offset
* @return int
*/
public static final int byteArrayToInt(byte[] arr,int offset) {
if (arr == null || arr.length - offset < 4)
return -1;
int r0 = (arr[offset] & 0xFF) << 24;
int r1 = (arr[offset + 1] & 0xFF) << 16;
int r2 = (arr[offset + 2] & 0xFF) << 8;
int r3 = arr[offset + 3] & 0xFF;
return r0 + r1 + r2 + r3;
}
/**
* Fetches the IP Address of the Client. There is Delay of 2 Seconds for the API to return.
*/
public String getClientIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if(isWifiIp(inetAddress.getAddress())){
Logger.d(TAG,"-------- Local IP Address; Not Valid: "+inetAddress.getHostAddress());
continue;
}
if (!inetAddress.isLoopbackAddress()) {
String ipAddress = Formatter.formatIpAddress(inetAddress.hashCode());
Logger.d(TAG,"-------- Some Valid IPv4 is ---"+ipAddress);
return ipAddress;
}
}
}
} catch (SocketException ex) {
Logger.e(TAG,ex.toString());
}
return null;
}
请帮助
4)当我关闭移动数据网络并打开Wifi时,我仍然得到一些有效的IPv4地址,该地址在2.3.5及以下版本中找不到。
谢谢
awk – 如何从日志文件中获取IP地址?
我的日志文件
crawl-66-249-64-13.googlebot.com - - [17/Oct/2004:04:40:15 +0100] "GET /robots.txt HTTP/1.0" 200 25 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" 66-194-6-72.gen.twtelecom.net - - [17/Oct/2004:04:50:06 +0100] "GET / HTTP/1.1" 200 1727 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312460)" dup-200-66-220-217.prodigy.net.mx - - [17/Oct/2004:05:36:43 +0100] "GET /midi/main_p.htm HTTP/1.1" 200 1061 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" dup-200-66-220-217.prodigy.net.mx - - [17/Oct/2004:05:37:08 +0100] "GET /favicon.ico HTTP/1.1" 404 1154 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" dup-200-66-220-217.prodigy.net.mx - - [17/Oct/2004:05:37:17 +0100] "GET /midi/mt_pcmid.htm HTTP/1.1" 200 1839 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" dup-200-66-220-217.prodigy.net.mx - - [17/Oct/2004:05:37:24 +0100] "GET /midi/mt_midcp.htm HTTP/1.1" 200 884 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" dup-200-66-220-217.prodigy.net.mx - - [17/Oct/2004:05:37:32 +0100] "GET /midi/mt_mpc.htm HTTP/1.1" 200 3321 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
如何只显示IP地址?
解决方法
gawk '{ print gensub(/[^0-9]*([0-9]{1,3})-([0-9]{1,3}).*/,"\\1.\\2.\\3.\\4","g",$0) }' file.txt
DNS解析的另一种方法:
cut -d' ' -f1 file.txt | xargs dig +short
或者使用awk:
awk '{print $1}' file.txt | xargs dig +short
iPhone/iPad/OSX:如何以编程方式获取IP地址?
如何查询网络子系统以了解我的IPv4(和IPv6)地址是什么?
谢谢。
PS:我可以禁用IPv6吗?
解决方法
更有趣的是,它可以返回找到的所有地址的字典,跳过未上传接口的地址或与环回相关联的地址。前面的代码以及关于这个主题的其他解决方案不会正确地解码IPv6(inet_ntoa不能处理它们)。这是在Jens Alfke在Apple论坛上指出的 – 使用的正确功能是inet_ntop(看看手册页,或者参考Jens提供的inet_ntop这篇文章。
字典键具有“interface”“/”“ipv4或ipv6”的形式。
#include <ifaddrs.h> #include <arpa/inet.h> #include <net/if.h> #define IOS_CELLULAR @"pdp_ip0" #define IOS_WIFI @"en0" //#define IOS_VPN @"utun0" #define IP_ADDR_IPv4 @"ipv4" #define IP_ADDR_IPv6 @"ipv6" - (Nsstring *)getIPAddress:(BOOL)preferIPv4 { NSArray *searchArray = preferIPv4 ? @[ /*IOS_VPN @"/" IP_ADDR_IPv4,IOS_VPN @"/" IP_ADDR_IPv6,*/ IOS_WIFI @"/" IP_ADDR_IPv4,IOS_WIFI @"/" IP_ADDR_IPv6,IOS_CELLULAR @"/" IP_ADDR_IPv4,IOS_CELLULAR @"/" IP_ADDR_IPv6 ] : @[ /*IOS_VPN @"/" IP_ADDR_IPv6,IOS_VPN @"/" IP_ADDR_IPv4,*/ IOS_WIFI @"/" IP_ADDR_IPv6,IOS_WIFI @"/" IP_ADDR_IPv4,IOS_CELLULAR @"/" IP_ADDR_IPv6,IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ; NSDictionary *addresses = [self getIPAddresses]; NSLog(@"addresses: %@",addresses); __block Nsstring *address; [searchArray enumerateObjectsUsingBlock:^(Nsstring *key,NSUInteger idx,BOOL *stop) { address = addresses[key]; if(address) *stop = YES; } ]; return address ? address : @"0.0.0.0"; } - (NSDictionary *)getIPAddresses { NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8]; // retrieve the current interfaces - returns 0 on success struct ifaddrs *interfaces; if(!getifaddrs(&interfaces)) { // Loop through linked list of interfaces struct ifaddrs *interface; for(interface=interfaces; interface; interface=interface->ifa_next) { if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) { continue; // deeply nested code harder to read } const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr; char addrBuf[ MAX(INET_ADDRSTRLEN,INET6_ADDRSTRLEN) ]; if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) { Nsstring *name = [Nsstring stringWithUTF8String:interface->ifa_name]; Nsstring *type; if(addr->sin_family == AF_INET) { if(inet_ntop(AF_INET,&addr->sin_addr,addrBuf,INET_ADDRSTRLEN)) { type = IP_ADDR_IPv4; } } else { const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr; if(inet_ntop(AF_INET6,&addr6->sin6_addr,INET6_ADDRSTRLEN)) { type = IP_ADDR_IPv6; } } if(type) { Nsstring *key = [Nsstring stringWithFormat:@"%@/%@",name,type]; addresses[key] = [Nsstring stringWithUTF8String:addrBuf]; } } } // Free memory freeifaddrs(interfaces); } return [addresses count] ? addresses : nil; }
EDIT1:代码更新于2014年5月16日(错误由lhunath指出,见注释)。环回地址现在返回,但它很容易你取消注释测试以自己排除它们。
编辑2:(由一些未知的人):进一步改进2015年3月13日:如果用户使用VPN(不管是通过WiFi还是蜂窝),以前的代码将失败。现在,它甚至与VPN连接工作。 VPN连接优先于WiFi和Cell,因为这是设备处理它的方式。这甚至适用于Macs,因为在Mac上的VPN连接也使用IF utun0但未测试。
EDIT3:(9/8/2016)鉴于@Qiulang遇到的问题(见评论)与VPN代码(别人添加),我已经评论过了。如果任何人明确地知道如何指定用户VPN,请提出评论。
jNetPcap怎么根据IP地址获得MAC地址?
jNetPcap怎么根据IP地址获得MAC地址?关于如何从打开的TCPConn *中检索IP地址?和如何查找tcp ip地址的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android:如何知道IP地址是Wifi IP地址?、awk – 如何从日志文件中获取IP地址?、iPhone/iPad/OSX:如何以编程方式获取IP地址?、jNetPcap怎么根据IP地址获得MAC地址?的相关知识,请在本站寻找。
本文标签: