package com.anryg.bigdata;
//import com.googlecode.ipv6.IPv6Network;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPUtils {
private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
/**
* @DESC: 将IP转为10进制
* */
public static long ip2Long(String ipstr) {
InetAddress ip = null;
try {
ip = InetAddress.getByName(ipstr);
} catch (UnknownHostException e) {
logger.error("UnknownHost...",e);
}
byte[] octets = ip.getAddress();
long result = 0;
for (byte octet : octets) {
result <<= 8;
result |= octet & 0xff;
}
return result;
}
/**
* @DESC: 经10进制转换成为IPV4地址字符串
* */
public static String Long2Ip(long ten) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
sb.insert(0, Long.toString(ten & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
ten = ten >> 8;
}
return sb.toString();
}
/**
* 根据IPV4地址和子网掩码计算IPV4地址范围,例如:192.168.1.53/27 --》3232235808,3232235839
* @param ipAndMask
* @return IPV4地址范围
*/
public static long[] getIPLongScope(String ipAndMask) {
String[] ipArr = ipAndMask.split("/");
if (ipArr.length != 2) {
throw new IllegalArgumentException("invalid ipAndMask with: "
+ ipAndMask);
}
int netMask = Integer.valueOf(ipArr[1].trim());
if (netMask < 0 || netMask > 32) {
throw new IllegalArgumentException("invalid ipAndMask with: "
+ ipAndMask);
}
long ipInt = ip2Long(ipArr[0]);
long netIP = ipInt & (0xFFFFFFFF << (32 - netMask));
long hostScope = (0xFFFFFFFF >>> netMask);
return new long[] { netIP, netIP + hostScope };
}
/**
* 根据IPV4地址和子网掩码计算IPV4地址范围,例如:ip:192.168.1.53,子网掩码:255.255.255.224--》3232235808,3232235839
* @param ipaddr,mask IPV4地址,子网掩码 192.168.1.53,255.255.255.224
* @return IPV4地址范围字符串
*/
public static String getIPNetworkAddr(String ipaddr, String mask){
//IP地址和子网掩码与得到网络地址
Long ipNetworkAddr = ip2Long(ipaddr)&ip2Long(mask);
Long ipBroadcastAddr = ((ipNetworkAddr^ip2Long(mask))^0xffffffffL);
//System.out.println(Long.toBinaryString(ipBroadcastAddr));
return Long2Ip(ipNetworkAddr+1)+"-->"+Long2Ip(ipBroadcastAddr-1);
}
/**
* ipv6字符串转整数
* @param ipv6
* @return
*/
public static BigInteger ipv6ToBigInt(String ipv6)
{
int compressIndex = ipv6.indexOf("::");
if (compressIndex != -1)
{
String part1s = ipv6.substring(0, compressIndex);
String part2s = ipv6.substring(compressIndex + 1);
BigInteger part1 = ipv6ToBigInt(part1s);
BigInteger part2 = ipv6ToBigInt(part2s);
int part1hasDot = 0;
char[] ch = part1s.toCharArray();
for (char c : ch)
{
if (c == ':')
{
part1hasDot++;
}
}
// ipv6 has most 7 dot
return part1.shiftLeft(16 * (7 - part1hasDot )).add(part2);
}
String[] str = ipv6.split(":");
BigInteger big = BigInteger.ZERO;
for (int i = 0; i < str.length; i++)
{
//::1
if (str[i].isEmpty())
{
str[i] = "0";
}
big = big.add(BigInteger.valueOf(Long.valueOf(str[i], 16))
.shiftLeft(16 * (str.length - i - 1)));
}
return big;
}
/**
* @Author liuxh02
* @Description 整数转为ipv6地址字符串
* @Date 2020/8/5
* @Param [big]
* @return java.lang.String
**/
public static String bigIntToipv6(BigInteger big)
{
String str = "";
BigInteger ff = BigInteger.valueOf(0xffff);
for (int i = 0; i < 8 ; i++)
{
str = big.and(ff).toString(16) + ":" + str;
big = big.shiftRight(16);
}
//the last :
str = str.substring(0, str.length() - 1);
return str.replaceFirst("(^|:)(0+(:|$)){2,8}", "::");
}
/**
* @Author liuxh02
* @Description 根据ipv6地址和子网掩码计算IP范围,返回数组
* @Date 2020/8/6
* @Param 【起始IP,结束IP】
* @return java.math.BigInteger[]
**/
/* public static BigInteger[] getIPV6LongScope(String ipv6AndMask ){
IPv6Network network = IPv6Network.fromString(ipv6AndMask);
BigInteger start=network.getFirst().toBigInteger();//起始IP
BigInteger end=network.getLast().toBigInteger();//结束IP
System.out.println(end);
return new BigInteger[]{start,end};
}*/
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Scala的大数据项目用户上网行为分析项目源码.zip 这份数据,一共个9个字段,其字段意义解释分别如下: client_ip: 指上网用户的ip地址,你可以根据这个ip知道这个用户大概的位置信息,这个有专门的api可以查询; domain:指上网人要上的网站地址,你可以根据该网站的性质来判断这个人的上网行为; time:上网人的上网时间; target_ip: 上网人要上的网站的目标ip地址; rcode:网站返回状态码,0为正常响应,2为不正常; query_type: 查询类型,几乎都是1,即正常上网行为; authority_recode:网站服务器真正返回的域名,可能跟domain不一样,如果不一样的话,可能说明是个钓鱼网站之类的,你可以去分析分析; add_msg: 附加信息,几乎都为空,你可以看看如果有内容的话,到底是什么玩意; dns_ip:当前要上的这个网站由哪个DNS服务器给提供的解析,一般一个DNS服务器会服务一个区域,如果由同一个DNS服务器进行解析的,说明他们在同一片大的区域;
资源推荐
资源详情
资源评论
收起资源包目录
基于Scala的大数据项目用户上网行为分析项目源码.zip (35个子文件)
项目说明.md 2KB
pom.xml 613B
redis
pom.xml 6KB
src
main
java
com
anryg
bigdata
IPUtils.java 5KB
RedisClientUtils.java 5KB
RedisParam.java 1KB
IpSearch.java 3KB
flink-coding
pom.xml 11KB
src
main
resources
hive-site.xml 23KB
scala
com
anryg
FlinkDSFromKafka2HDFS.scala 3KB
hive_cdc
FlinkReadKafka2Hive.scala 5KB
FlinkWithHive.scala 2KB
window_and_watermark
FlinkTBFromKafkaWithWatermark.scala 5KB
FlinkSQLFromKafkaWithWatermarkAndWindow.scala 3KB
FlinkDSFromKafkaWithWatermark.scala 4KB
FlinkTest04.scala 3KB
spark-coding
pom.xml 9KB
src
main
scala
com
anryg
bigdata
test
map_pk_mappartition
MapTest.scala 2KB
MapPartitionTest.scala 2KB
data_skew
DataSkew01.scala 2KB
MyPartitioner.scala 554B
DataSkew02.scala 4KB
hive
ConnectHive.scala 1KB
Spark3ConnectHive3.scala 1KB
streaming
ods
StreamingSource2HiveOds.scala 4KB
demo
StructuredStreamingFromKafka2Hive.scala 4KB
StructuredStreaming4Kafka2CSV.scala 3KB
StructuredStreamingFromKafka2ES.scala 4KB
StructuredStreamingReadHive.scala 1KB
window_watermark
WorldCountWithWatermark.scala 3KB
StructuredStreamingFromKafka.scala 4KB
dwd
StreamingFromOds2Dwd.scala 4KB
StreamingProcessHelper.scala 1KB
StructuredStreamingTest.scala 2KB
spark-coding.iml 18KB
共 35 条
- 1
资源评论
Make程序设计
- 粉丝: 5621
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功