Địa chỉ Hoa Kỳ không thể gửi qua internet?


46

Đối với một dự án một lần, tôi cần mã hóa địa lý một vài ngàn địa chỉ. Trước đây tôi đã sử dụng nhiều tài nguyên trực tuyến cho loại điều này (ví dụ: Google Maps API), nhưng các địa chỉ tôi đang làm việc phải được giữ bí mật - điều đó có nghĩa là không gửi nó qua Internet, trừ khi có một số sắt -clad đảm bảo sự riêng tư. Tôi có những lựa chọn nào khác?


4
Có một địa phương cụ thể mà bạn muốn mã hóa địa lý? Ví dụ: Úc, Hoa Kỳ, một tiểu bang cụ thể, v.v.
đánh dấu

Câu hỏi hay - Tôi quan tâm rộng rãi đến Hoa Kỳ, đặc biệt là Colorado, các hạt Front Range chính xác.
Matt Parker

1
Tôi thực sự sẽ mở một cuộc thảo luận nhanh với RTD, tôi biết trong khu vực đó họ có một hệ thống GIS mạnh mẽ và có khả năng có thể cung cấp cho bạn sự hỗ trợ trực tiếp. Nếu không thì; Geocoder :: US là một lựa chọn tuyệt vời. Bạn có thể chạy nó trong nội bộ và không phải mạo hiểm dữ liệu của bạn đi qua dây.
DEWright

@DEWright, đó là một ý tưởng thú vị - thậm chí còn hơn thế đối với một câu hỏi khác của tôi . Cảm ơn!
Matt Parker

Câu trả lời:



10

Nếu sử dụng API mã hóa địa lý của Google hoặc một nguồn trực tuyến khác là tùy chọn của bạn chứ không phải tùy chọn cục bộ, tôi khuyên bạn nên xem xét Dự án Tor (dễ dàng cài đặt thông qua gói có tên 'Gói Vidalia').

Tor bảo vệ bạn bằng cách chuyển các liên lạc của bạn xung quanh một mạng lưới rơle phân tán được điều hành bởi các tình nguyện viên trên khắp thế giới: nó ngăn ... các trang web bạn truy cập tìm hiểu vị trí thực của bạn.

Cùng với việc tiêm địa chỉ ngẫu nhiên và sử dụng ssl (https) để mã hóa thông tin liên lạc đến các điểm cuối của chúng (đảm bảo bạn cũng đang thực hiện việc này), tôi không thể nghĩ ra một cách an toàn hơn để mã hóa địa lý từ xa. Bất cứ dịch vụ mã hóa địa lý nào bạn đang sử dụng sẽ không thể xác định được các yêu cầu cuối cùng đến từ đâu và với https, sẽ không có ai khác làm như vậy. Lưu ý: không sử dụng dịch vụ mã hóa địa lý yêu cầu khóa api cho việc này hoặc bạn sẽ không còn ẩn danh. (Google không yêu cầu khóa api nữa).

Một lợi ích phụ của quy trình này là bạn sẽ không còn bị hạn chế đối với bất kỳ số lượng yêu cầu mã hóa địa lý nào, vì các yêu cầu của bạn sẽ giống như chúng đến từ nhiều địa chỉ IP. Tuy nhiên, tôi không khuyến nghị hoặc tán thành việc lạm dụng các API miễn phí đáng yêu này! Tốc độ sẽ vẫn bị giới hạn nếu tốc độ giới hạn API (mặc dù tốc độ truyền sử dụng Tor chậm hơn một chút so với kết nối trực tiếp).

Nghiên cứu điển hình về Python - Khi bạn đã cài đặt Gói Vidalia và có proxy chạy trên 127.0.0.1:8118 (mặc định), trong Python 2.7 trở lên, bạn có thể thiết lập proxy https urllib2 bằng cách sử dụng:

import urllib2
proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen("https://maps.google.com/maps/geo?q=Los+Angeles&sensor=false&gl=us")

Lưu ý rằng proxy urllib2 không hoạt động với https cho đến khi ít nhất Python 2.7 trở lên, vì vậy phương pháp này chỉ hoạt động với các phiên bản Python gần đây. Đảm bảo bạn đã có 'https' (không phải 'http') ở cả hai nơi trong ví dụ trên. Tôi chỉ thử nghiệm nó với Python 2.7.1.

Vidalia thay đổi nguồn gốc địa chỉ IP rõ ràng / nhận dạng của bạn cứ sau 10 phút, nhưng nếu bạn gặp phải tốc độ chậm hoặc các vấn đề khác (lỗi vượt quá hạn ngạch) hoặc nếu bạn đặc biệt hoang tưởng và muốn thay đổi danh tính thường xuyên hơn, bạn có thể thay đổi danh tính Tor của mình sử dụng mã python ở đây (sửa đổi một chút bên dưới). Bạn sẽ cần thay đổi mật khẩu Tor thành mật khẩu tĩnh (thay vì mật khẩu được tạo ngẫu nhiên) bằng cách nhập cài đặt Vidalia. Cũng có thể cần phải khởi động lại Vidalia sau tất cả các thay đổi.

p = "MySuperSecurePassword"
def renewTorIdentity():
    success = False
    try:
        s = socket.socket()
        s.connect(('localhost', 9051))
        s.send('AUTHENTICATE "' + p + '"\r\n')
        resp = s.recv(1024)
        if resp.startswith('250'):
            s.send("signal NEWNYM\r\n")
            resp2 = s.recv(1024)
            if resp2.startswith('250'):
                success = True
    except:
        success = False
    return success

4
Điều đó không giữ bí mật địa chỉ, phải không? Vị trí thực của máy gửi truy vấn là không liên quan (không bảo mật) ở đây.
underdark

4
Đối với hầu hết các mục đích, vị trí thực của máy gửi truy vấn là rất quan trọng trong việc bảo vệ tính ẩn danh của dữ liệu được gửi đến dịch vụ mã hóa địa lý. Giả sử rằng một máy tính trong Viện Nghiên cứu X gửi yêu cầu mã hóa địa lý cho 1000 địa chỉ. Người ta có thể (ít nhất là về mặt lý thuyết) xác định những địa chỉ đó có chứa những người mắc bệnh X. Ngược lại, các địa chỉ được trộn lẫn với hàng ngàn yêu cầu ngẫu nhiên từ nhiều người dùng và đến từ nhiều địa chỉ IP không tương ứng với bất kỳ một người dùng nào (tình huống Tor) không thể xác định được theo mục đích.
Victor Van Hee

Gửi dữ liệu tới Google (thông qua Tor hoặc bất cứ điều gì) là một vấn đề riêng tư cơ bản. Google không cung cấp "bảo đảm quyền riêng tư của người sắt".
Nicolas Raoul

7

Một tùy chọn là sử dụng Geo-Coder-US , đây là mô-đun Perl mã nguồn mở sử dụng dữ liệu Tiger / Line của Tổng điều tra Hoa Kỳ để mã hóa địa lý. Tôi đã không sử dụng nó cá nhân, nhưng nó trông tuyệt vời. Liên kết ở trên bao gồm một tổng quan đẹp và liên kết đến một phiên bản đã có các tệp Điều tra dân số cần thiết được lắp ráp.


6

Thư viện Geokit có thể sử dụng bất kỳ Google, Yahoo, Geocoder.us, Geocoder.ca và Geonames. Nó được viết bằng Ruby và cũng có một thư viện chị em cho các dự án Ruby on Rails của bạn:

http://geokit.rubyforge.org/

Để bảo vệ quyền riêng tư, bạn có thể truyền bá các truy vấn tới tất cả các nhà cung cấp bằng cách tách chúng thành các bộ ít có khả năng được liên kết với các hoạt động của bạn. Bạn cũng có thể tạo tiếng ồn trong địa chỉ của mình bằng cách thêm địa chỉ thực từ thư mục điện thoại trực tuyến. Và tôi khuyên bạn nên chạy tập lệnh này từ nhiều nơi khác nhau, chẳng hạn như quán cà phê internet, kết hợp các kết quả ở cuối.

Cách duy nhất để thực sự bảo vệ quyền riêng tư của bạn là tải xuống toàn bộ dữ liệu và chạy tập lệnh của bạn theo nó. Có hệ thống Nominatim từ OpenStreetMap. Nó không hoàn chỉnh cho tất cả các thành phố, nhưng bạn có thể sử dụng nó để giảm danh sách các địa chỉ được gửi đến các nhà cung cấp khác.


5

Mặc dù vẫn đang trong giai đoạn phát triển ban đầu, http://openaddresses.org/ nhằm mục đích cung cấp một cơ sở dữ liệu mở về các địa chỉ trên toàn thế giới và các dịch vụ mã hóa địa lý liên quan.

Mặc dù không riêng tư, bản chất của cơ sở dữ liệu địa chỉ mở có thể có nghĩa là nó có sẵn để tải xuống toàn bộ (hoặc ít nhất là cho các khu vực được chọn) để cho phép mã hóa địa lý ngoại tuyến.



3

Tôi nghĩ rằng mã đằng sau http://geocoder.us/ đã có sẵn để tải xuống để bạn có thể lấy nó và tệp dữ liệu TIGER và ít nhiều thiết lập cài đặt cục bộ của riêng bạn. Tôi không thấy điều đó ngay lập tức khi xem lại trang web đó, nhưng bạn có thể muốn xem xét một chút.


3

Tại sao không sử dụng cùng một bộ mã hóa địa lý mà bạn đã sử dụng trước đó, chỉ cần xóa tất cả các dữ liệu meta khác?

Đừng gửi qua "Địa điểm bí mật; 123 Phố chính, Thành phố nào đó", chỉ gửi qua "123 Phố chính, Thành phố nào đó"? Các địa chỉ là dù sao thông tin công cộng. Chỉ cần đừng nói với trình mã hóa địa lý rằng bạn có một danh sách các căn cứ hạt nhân hoặc tất cả các địa điểm NSA. Kết quả sẽ ở định dạng bảng, sau đó bạn có thể đính kèm lại tất cả các dữ liệu meta bí mật khác của mình.


1
Đây là cách tôi cảm nhận về tình hình. Đây không phải là cách chủ nhân của tôi cảm thấy về tình huống này. Để mang lại lợi ích cho sự nghi ngờ, nếu bạn nhận được một danh sách các địa chỉ từ một địa chỉ IP có thể nhận ra, sẽ không quá khó để tưởng tượng rằng ai đó có thể tìm ra địa chỉ liên quan đến điều gì.
Matt Parker

1
@Matt Đó là một điều mà các chuyên gia tư vấn tốt cho :-). Một lựa chọn khác là trộn các địa chỉ linh tinh với những địa chỉ bạn gửi qua. Chắc chắn, nó làm tăng chi phí, nhưng dù sao thì chúng rất thấp ...
whuber

3

Tìm kiếm trên trang chủ OpenStreetMap là một hệ thống có tên là Nominatim . Bạn có thể gọi nó là dịch vụ mã hóa địa lý (nếu bạn nhẹ nhàng) nhưng tất cả đều là nguồn mở, do đó bạn cũng có thể thiết lập nó trên máy chủ của riêng mình.

Đây là sử dụng dữ liệu OpenStreetMap được tải vào cơ sở dữ liệu postGiS. Nó tương đối mới và vẫn đang được phát triển, và quá trình thiết lập và tải dữ liệu không đơn giản và rất đói tài nguyên. ... nhưng nó miễn phí và mở!


3

Hầu hết các câu trả lời đang hướng bạn đến một cơ sở dữ liệu địa phương. Trong khi điều đó chắc chắn sẽ hoạt động, bạn cũng phải xem xét liệu gecoding có phải là miền cốt lõi của bạn hay không. (Đó có phải là những gì bạn giỏi không? Nếu vậy, có lẽ bạn đã có dữ liệu họ đang giới thiệu. Nếu không, VÀ BẠN MUỐN NÓ, thì bạn nên tải xuống dữ liệu và chỉ cần làm cục bộ. Tuy nhiên, nếu bạn chỉ cần để giải quyết vấn đề và không muốn mất nhiều giờ để sản xuất, vẫn có các tùy chọn để thực hiện thông qua API mà không ảnh hưởng đến bảo mật.

Đầu tiên, nhấn mạnh vào HTTPS vì bạn cần bảo mật dữ liệu trên đường đến API và sau đó trên đường quay lại với bạn. Thứ hai, đảm bảo rằng bạn đang thực hiện một yêu cầu POST thay vì yêu cầu GET cho API. Sử dụng POST, bạn chỉ cần chuyển một yêu cầu URL với tải trọng và kết quả duy nhất đạt được nhật ký máy chủ là thực tế là yêu cầu xác minh địa chỉ và mã hóa địa lý được thực hiện tại một thời điểm nhất định và từ một IP nhất định. Cả địa chỉ được gửi và địa chỉ được trả lại sẽ không được lưu vào đĩa hoặc ghi vào nhật ký máy chủ. Nó không an toàn hơn thế nhiều.

Vì vậy, trong khi một hộp cục bộ chắc chắn sẽ an toàn, nó có thể đòi hỏi rất nhiều sự phát triển để làm những gì bạn cần. Vì các mối quan tâm bảo mật có thể được bình định, bạn có thể muốn xem xét (một lần nữa) tùy chọn sử dụng API.

Tôi làm việc cho một công ty xác minh địa chỉ chuyên về mã hóa địa lý API an toàn - SmartyStreets .


1

Chủ đề cũ nhưng đáng nói đến nó. http://www.tigergeocoder.com/ sử dụng dữ liệu TIGER 2013, sẵn sàng chạy phiên bản máy chủ của riêng bạn trong đám mây Amazon EC2.


1

Thiết lập PostGIS Tiger Geocoder trong hộp linux cục bộ của bạn. Nó chắc chắn là cồng kềnh hơn API trực tuyến, nhưng có lẽ là đặt cược tốt nhất cho tình huống của bạn. Và nó có thể mở rộng đến hàng triệu địa chỉ nếu cần.

Với sự trợ giúp của playbook ansible, việc thiết lập máy chủ trong linux dễ dàng hơn nhiều so với trước đây. Việc truy vấn SQL có thể sẽ mất nhiều thời gian hơn nếu bạn không quen với SQL hoặc PostGIS.

Bạn có thể kiểm tra thiết lập hệ thống của tôitập lệnh của tôi để biết thêm chi tiết. Nó nên bao gồm tất cả các thông tin bạn cần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.