ลินุกซ์ประเทศ traceroute


1

โอเคฉันกำลังค้นหาอยู่พักหนึ่งและฉันไม่อยากจะเชื่อเลย ไม่มี traceroute ที่แสดงให้ฉันเห็นฮ็อปบนแผนที่โลกหรือไม่? และอาจเป็นรุ่น 64 บิต

ฉันพบ xtraceroute, ผ่อนผัน, GTrace ... แต่พวกเขาทั้งหมดค่อนข้างสนิม

บางทีฉันโง่เกินไป

ใครรู้อะไรบางอย่าง

คำตอบ:


1

สมมติว่ามีฐานข้อมูล GeoIP ที่สามารถดาวน์โหลดได้อย่างอิสระการผูกฟรีสำหรับฐานข้อมูลดังกล่าวสำหรับเกือบทุกภาษาการเขียนโปรแกรมและไลบรารีที่อนุญาตให้พล็อตจุดบนแผนที่โลกคุณสามารถลองใช้ traceroute ที่เป็นภาพของคุณเอง นี่เป็นความคิดที่ดีสำหรับโครงการขนาดเล็ก

แก้ไข: ในขณะที่คำตอบนี้เหมาะสำหรับ StackOverflow นี่คือแอป traceroute ที่มองเห็นได้ซึ่งเขียนด้วยภาษา Python ในขณะที่มันใช้งานได้กับฉันบน Linux แต่ก็ไม่ได้ผลสำหรับทุกคนเพราะมันมีข้อเสียมากมาย:

  • ใช้ไลบรารี Python ของบุคคลที่สามจำนวนหนึ่งซึ่งจำเป็นต้องติดตั้ง คุณจะได้รับImport Errorถ้าคุณไม่มีพวกเขา
  • ไม่รวมภาพแผนที่โลกที่ใช้ [ฉันจับภาพฟรีจากวิกิพีเดีย :)]
  • ไม่ได้รวมฐานข้อมูล geoip ที่ใช้ [ฉันใช้ฟรีจาก maxmind.com]
  • มันควรจะทำงานบน Linux ที่mtrติดตั้งไว้
  • มันใช้ชื่อไฟล์ hardcoded สำหรับไฟล์ชั่วคราว

นี่คือรหัส:

#!/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()

0

visualroute อาจมีรุ่น linux หรือไม่? ไม่แน่ใจว่า Google ดูเหมือนจะบอกว่าใช่เว็บไซต์ของพวกเขาดูเหมือนไม่ - แชร์แวร์ แต่อย่างใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.