- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含下表的 MySQL 数据库:
CREATE TABLE IF NOT EXISTS `auth` (
`id` int(11) NOT NULL auto_increment,
`session` char(32) NOT NULL,
`success` tinyint(1) NOT NULL,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`timestamp` datetime NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `sessions` (
`session` char(32) NOT NULL,
`starttime` datetime NOT NULL,
`endtime` datetime default NULL,
`ip` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`)
);
CREATE TABLE `geoip_blocks` (
`gbl_block_start` int(10) unsigned NOT NULL,
`gbl_block_end` int(10) unsigned NOT NULL,
`gbl_glc_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`gbl_block_start`,`gbl_block_end`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `geoip_locations` (
`glc_id` int(10) unsigned NOT NULL,
`glc_country` char(2) NOT NULL,
`glc_region` varchar(2) NOT NULL,
`glc_city` varchar(64) NOT NULL,
`glc_zip` varchar(16) NOT NULL,
`glc_latitude` decimal(7,4) NOT NULL,
`glc_longitude` decimal(7,4) NOT NULL,
PRIMARY KEY (`glc_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中 geoip_blocks
和 geoip_locations
是从 MaxMind 的免费旧版地理定位数据库导入的。
我想创建一个报告,其中包含 auth.success
等于 1 的所有 session 的时间戳、IP 编号和地理位置数据(国家、纬度、经度)。
我可以轻松地创建一个时间戳和所有 session 的 IP 号报告,其中 auth.success
等于 1:
SELECT
UNIX_TIMESTAMP(auth.timestamp) as time_sec,
sessions.ip as ip
FROM auth
INNER JOIN sessions ON auth.session = sessions.session
WHERE auth.success = 1
给定一个 IP 号码 ip
,我可以获得它的地理位置数据:
SELECT
geoip_locations.glc_country as country,
geoip_locations.glc_latitude as lat,
geoip_locations.glc_longitude as lon
FROM geoip_blocks INNER JOIN geoip_locations
ON geoip_locations.glc_id = geoip_blocks.gbl_glc_id
WHERE gbl_block_start <= INET_ATON(ip)
ORDER BY gbl_block_start DESC
LIMIT 1
但是我应该使用什么样的查询来获得我需要的那种报告(对于上面第一个查询会产生的所有 IP)?
最佳答案
当我使用您表中的一些条目测试以下查询时,它起作用了。我在名为 soq
的数据库中创建了表。我在您的创建语句中发现一处语法错误。您的 sessions
表主键应该是 session
而不是 id
。我将尝试编辑您的问题以解决该问题。
SELECT UNIX_TIMESTAMP(auth.timestamp) as time_sec,
auth.timestamp,
sessions.ip as ip,
geoip_locations.glc_country as country,
geoip_locations.glc_latitude as lat,
geoip_locations.glc_longitude as lon
FROM soq.geoip_blocks JOIN soq.geoip_locations ON (geoip_locations.glc_id = geoip_blocks.gbl_glc_id)
LEFT JOIN (soq.auth JOIN soq.sessions ON auth.session = sessions.session) -- nested join
ON (gbl_block_start <= INET_ATON(ip) AND gbl_block_end >= INET_ATON(ip))
WHERE success = 1
ORDER BY gbl_block_start DESC;
这是示例查询结果:
# time_sec, timestamp, ip, country, lat, lon
'1502385000', '2017-08-10 13:10:00', '5.82.243.128', 'SA', '25.0000', '45.0000'
'1502401200', '2017-08-10 17:40:00', '1.40.42.8', 'AU', '-27.0000', '133.0000'
'1502393400', '2017-08-10 15:30:00', '1.40.42.255', 'AU', '-27.0000', '133.0000'
这是我使用的一些测试数据:
-- AU loc_id = 17 19409408 = 1.40.42.0 19409663 = 1.40.42.255
-- SA loc_id - 186 89322240 = 5.82.243.0 89325567 = 5.82.255.255
INSERT INTO soq.sessions (`session`, `starttime`, `endtime`, `ip`) VALUES('userSession1',NOW(), ADDTIME(NOW(),'01:02:00'),'1.40.42.255');
INSERT INTO soq.sessions (`session`, `starttime`, `endtime`, `ip`) VALUES('userSession2',ADDTIME(NOW(),'02:03:00'), ADDTIME(NOW(),'03:04:00'),'1.40.42.8');
INSERT INTO soq.sessions (`session`, `starttime`, `endtime`, `ip`) VALUES('userSession3','2017-08-10 13:00:00', '2017-08-10 16:37:00','5.82.243.128');
INSERT INTO soq.auth (`session`, `success`, `username`, `password`, `timestamp`) VALUES('userSession1',1,'user1','pwd1','2017-08-10 15:30:00');
INSERT INTO soq.auth (`session`, `success`, `username`, `password`, `timestamp`) VALUES('userSession2',1,'user2','pwd2','2017-08-10 17:40:00');
INSERT INTO soq.auth (`session`, `success`, `username`, `password`, `timestamp`) VALUES('userSession3',1,'user3','pwd3','2017-08-10 13:10:00');
INSERT INTO soq.auth (`session`, `success`, `username`, `password`, `timestamp`) VALUES('userSession3',0,'user3','pwd3','2017-08-10 13:00:00');
-- 19409408 19409663 17
-- 89322240 89325567 186
INSERT INTO soq.geoip_blocks VALUES(19409408,19409663,17);
INSERT INTO soq.geoip_blocks VALUES(89322240,89325567,186);
-- 17 AU -27 133
-- 186 SA 25 45
INSERT INTO soq.geoip_locations VALUES (17,'AU','','','',-27,133);
INSERT INTO soq.geoip_locations VALUES (186,'SA','','','',25,45);
关于mysql - Geoip 与 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44988119/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我发现 MaxMind 的 GeoIP 数据库的准确度是 99.5%(免费)或 99.8%(商业),如他们网站上公布的那样。有人知道 0.5% 和 0.2% 是多少吗? 他们是新分配的 IP 地址,还
我正在尝试使用 MaxMind GeoIP 数据库,我注意到 C API 提供了一堆不同的缓存模式作为 GeoIP_open 的标志。初始化调用。 GEOIP_MEMORY_CACHE GEOIP_C
在安装 geoip 时,我遇到了依赖冲突。我可以安装 geoip-database 和 geoip-database-extra 包,或者 geoip-database-contrib。我没有注意到它
对于我的 Django 应用程序,我试图通过 amdin 存储登录位置的日志。 我创建了一个中间件并尝试使用“django.contrib.gis.utils import GeoIP”来获取地理位置
尝试捆绑具有 gem geoip-c 但得到 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. /Users/dur
如题,我想用golang做geoip,msg是json格式如下 {"type":"big_platform","xrealip":"8.8.8.8","scheme":"http","log_time
地理定位数据库的来源是什么http://www.maxmind.com/得到它的数据?据我了解,像 ARIN 和 RIPE 这样的 IP 注册机构只保存有关分配 IP 范围的公司的信息,因此它必须来自
我制作的一些网站存在垃圾邮件发送者的问题。我已经确保消息在发布之前必须得到批准,但最近情况变得更糟。 我只能看到所有垃圾邮件之间的一个链接。根据 geoiplookup,所有 IP 地址都是,来自中国
我要配置 GeoIP 根据共享服务器中的国家/地区 IP 地址将域重定向到子域。我创建了一个自定义的 php.ini 来导入 geoip.so 然后在我的 index.php 我添加了这段代码: 在
我有一个配置文件是这样的: input { file { path => "/home/kibana/Documents/external_noise.log" type
当事件从Logstash发送到具有默认indexName的elasticsearch时,geoip.location属于geo_point数据类型。由于geoip.location具有geo_poin
目前,我正在使用 Quova,但当用户使用移动网络(而非 WiFi)并在本国境外漫游时,我正在努力寻找/理解 GeoIP(针对国家/地区分辨率)的准确性。 如果设备的 IP 地址是从家庭网络分配的,那
我想知道你是否可以给我一个有效的代码,这样当有人从英国加载网站时,它会将用户重定向到/UK/然后如果他们从美国加载它会转到/US/如果他们'来自欧盟任何地方(英国除外)到/EU/ 我试过这个代码,它只
我安装了 PHP 5.4 和 GeoIP,但我无法让 GeoIP 工作。错误是: fatal error :在第 7 行/var/www/html/geoip/test.php 中调用未定义的函数 g
这是我正在使用的模块:http://wiki.nginx.org/HttpGeoipModule 据我所知,由于它是在 nginx 配置和 uwsgi 上配置的,因此看起来别无选择,只能让它在每个页面
我正在尝试使用 ELK 堆栈创建 GeoIP 数据,它可以在 Kibana 中可视化。 我最近在 Ubuntu Server 14.04 的虚拟实例上安装了 ELK 堆栈(Elastic Search
我在使用 geoip 阻止国家时遇到问题。当我使用我的托管帐户实用程序来阻止国家/地区时,它会在 .htaccess 中创建以下脚本。问题是它似乎不起作用(添加了美国但未被阻止)。 GeoIPEnab
我正在运行Elasticsearch 1.5.2版。 Logstash版本1.5.4。 大多数logstash设置为默认设置: geoip { source => "ipaddress"
这个问题是一个更具体问题的一般版本 asked here .但是,这些答案无法使用。 问题: geoIP数据的原始来源是什么? 许多网站会告诉我我的 IP 在哪里,但它们似乎都在使用来自不到 5 家公
我是一名优秀的程序员,十分优秀!