GVKun编程网logo

如何从打开的TCPConn *中检索IP地址?(如何查找tcp ip地址)

17

在这篇文章中,我们将带领您了解如何从打开的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地址)

如何从打开的TCPConn *中检索IP地址?(如何查找tcp ip地址)

我有一个从TCPListener.acceptTCP接受的TCPConn
*。我只想获取IP地址(无端口信息)作为字符串或IP。什么是正确的方法(即最少的转换/字符串操作)?

答案1

小编典典

要获得IP,作为IP对象,最直接的方法应该是

tcpconn.RemoteAddr().(*net.TCPAddr).IP

使用类型断言没有错,在这种情况下,这实际上是预期的。

Android:如何知道IP地址是Wifi 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地址?

awk – 如何从日志文件中获取IP地址?

我试图将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地址?

iPhone/iPad/OSX:如何以编程方式获取IP地址?

我想以编程方式获取我的iPad的IP地址。
如何查询网络子系统以了解我的IPv4(和IPv6)地址是什么?

谢谢。
PS:我可以禁用IPv6吗?

解决方法

以下代码在iOS或OSX设备上查找所有IPv4和IPv6地址。第一个getIPAddress方法或多或少地作为这个答案中的旧代码:你可以喜欢一个或另一个类型的地址,它总是喜欢WIFI通过蜂窝(显然你可以改变这个)。

更有趣的是,它可以返回找到的所有地址的字典,跳过未上传接口的地址或与环回相关联的地址。前面的代码以及关于这个主题的其他解决方案不会正确地解码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地址?

jNetPcap怎么根据IP地址获得MAC地址?

关于如何从打开的TCPConn *中检索IP地址?如何查找tcp ip地址的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android:如何知道IP地址是Wifi IP地址?、awk – 如何从日志文件中获取IP地址?、iPhone/iPad/OSX:如何以编程方式获取IP地址?、jNetPcap怎么根据IP地址获得MAC地址?的相关知识,请在本站寻找。

本文标签: