โอเคฉันกำลังค้นหาอยู่พักหนึ่งและฉันไม่อยากจะเชื่อเลย ไม่มี traceroute ที่แสดงให้ฉันเห็นฮ็อปบนแผนที่โลกหรือไม่? และอาจเป็นรุ่น 64 บิต
ฉันพบ xtraceroute, ผ่อนผัน, GTrace ... แต่พวกเขาทั้งหมดค่อนข้างสนิม
บางทีฉันโง่เกินไป
ใครรู้อะไรบางอย่าง
โอเคฉันกำลังค้นหาอยู่พักหนึ่งและฉันไม่อยากจะเชื่อเลย ไม่มี traceroute ที่แสดงให้ฉันเห็นฮ็อปบนแผนที่โลกหรือไม่? และอาจเป็นรุ่น 64 บิต
ฉันพบ xtraceroute, ผ่อนผัน, GTrace ... แต่พวกเขาทั้งหมดค่อนข้างสนิม
บางทีฉันโง่เกินไป
ใครรู้อะไรบางอย่าง
คำตอบ:
สมมติว่ามีฐานข้อมูล GeoIP ที่สามารถดาวน์โหลดได้อย่างอิสระการผูกฟรีสำหรับฐานข้อมูลดังกล่าวสำหรับเกือบทุกภาษาการเขียนโปรแกรมและไลบรารีที่อนุญาตให้พล็อตจุดบนแผนที่โลกคุณสามารถลองใช้ traceroute ที่เป็นภาพของคุณเอง นี่เป็นความคิดที่ดีสำหรับโครงการขนาดเล็ก
แก้ไข: ในขณะที่คำตอบนี้เหมาะสำหรับ StackOverflow นี่คือแอป traceroute ที่มองเห็นได้ซึ่งเขียนด้วยภาษา Python ในขณะที่มันใช้งานได้กับฉันบน Linux แต่ก็ไม่ได้ผลสำหรับทุกคนเพราะมันมีข้อเสียมากมาย:
Import Error
ถ้าคุณไม่มีพวกเขาmtr
ติดตั้งไว้นี่คือรหัส:
#!/usr/bin/env python
"""visual traceroute"""
import subprocess
import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import pygeoip
import wugeo
GEOIPDB = "GeoLiteCity.dat"
class MyForm(QDialog):
"""Main app window"""
def __init__(self, parent = None):
"""doc"""
super(MyForm, self).__init__(parent)
self.setWindowTitle("Visual Route")
self.image_label = QLabel(self)
self.image_label.setMinimumSize(800, 600)
self.image_label.setAlignment(Qt.AlignCenter)
self.load_image("map.jpg")
self.ip_edit = QLineEdit(self)
self.tr_button = QPushButton("Traceroute", parent=self)
layout = QVBoxLayout()
layout.addWidget(self.image_label)
layout.addWidget(self.ip_edit)
layout.addWidget(self.tr_button)
self.setLayout(layout)
self.connect(self.tr_button, SIGNAL("clicked()"), self.traceroute)
def load_image(self, file_name):
"""Loads an image"""
image = QImage(file_name)
self.image_label.setPixmap(QPixmap.fromImage(image))
self.repaint()
def traceroute(self):
"""Do the traceroute thing"""
self.tr_button.setEnabled(False)
ip = self.ip_edit.text()
p = subprocess.Popen(["sudo", "/usr/sbin/mtr", "-n", "-c", "1",
"--raw", ip], stdout=subprocess.PIPE)
output = p.communicate()[0]
lines = output.split("\n")
ip_lines = lines[::2][:-1] # filter odds, skip last
ips = [x.split()[2] for x in ip_lines]
coords = self.get_coords(ips)
self.draw_dots(coords)
self.tr_button.setEnabled(True)
@staticmethod
def get_coords(ips):
"""Get coords using pygeoip"""
coords = []
geoip = pygeoip.GeoIP(GEOIPDB, pygeoip.MMAP_CACHE)
for ip in ips:
record = geoip.record_by_addr(ip)
latitude = record["latitude"]
longitude = record["longitude"]
location = (latitude, longitude, 1, "red")
coords.append(location)
return coords
def draw_dots(self, coords):
"""Draws dots on the world map
Uses temporary files (ugly!)"""
infile = "map.jpg"
outfile = "/tmp/outmap.jpg"
for coord in coords:
wugeo.geo_marker([coord], infile, outfile)
self.load_image(outfile)
time.sleep(1)
infile = outfile
def main():
"""Main function"""
app = QApplication(sys.argv)
form = MyForm()
form.show()
app.exec_()
if __name__ == "__main__":
main()
visualroute อาจมีรุ่น linux หรือไม่? ไม่แน่ใจว่า Google ดูเหมือนจะบอกว่าใช่เว็บไซต์ของพวกเขาดูเหมือนไม่ - แชร์แวร์ แต่อย่างใด