9

対応するシェル コマンドを実行しなくても、Python 内から ping と traceroute を実行できるようにしたいので、ネイティブの Python ソリューションを使用したいと思います。

4

7 に答える 7

11

外部モジュールを使用し、UDP や TCP を使用しないことを気にしない場合は、scapyが簡単な解決策です。

from scapy.all import *
target = ["192.168.1.254"]
result, unans = traceroute(target,l4=UDP(sport=RandShort())/DNS(qd=DNSQR(qname="www.google.com")))

または、tcpバージョンを使用できます

from scapy.all import *
target = ["192.168.1.254"]
result, unans = traceroute(target,maxttl=32)

これらのタスクを実行できるようにするには、root として scapy を実行する必要があることに注意してください。そうしないと、次のようになります。

socket.error: [Errno 1] Operation not permitted
于 2011-08-10T22:57:19.300 に答える
3

Webb Libraryは、あらゆる種類の Web 関連の抽出を実行するのに非常に便利です...そして ping と traceroute はそれを介して簡単に実行できます。トレースルート先の URL を含めるだけです。

import webb
webb.traceroute("your-web-page-url")

traceroute ログをテキスト ファイルに自動的に保存する場合は、次のコマンドを使用します。

webb.traceroute("your-web-page-url",'file-name.txt')

同様に、URl (サーバー) の IP アドレスは、次のコード行で取得できます。

print(webb.get_ip("your-web-page-url"))

それが役に立てば幸い!

于 2015-07-27T02:15:35.270 に答える
3

root としてインタープリターを実行することは、セキュリティ上の理由からしばしば嫌われます (もちろん、ping と traceroute の ICMP 仕様で必要とされる "生の" socked にアクセスするには、root 権限が必要です!)。難しいことではありません -- たとえば、この投稿は実行可能な ping を提供し、Jeremy Hylton の古いページには ICMP (ping と traceroute の両方) の基礎となるコードがまだ使用可能ですが、非常に古い Python バージョン用に書かれており、最新の機能に合わせて少し手を加える必要があります。 1 つ -- しかし、私が提供した両方の URL には、概念がすべて含まれています。

于 2009-07-20T05:06:49.240 に答える
2

mtrpacketパッケージを使用して、ping または traceroute を実行できるネットワーク プローブを送信できます。mtr コマンドライン ツールのバックエンドを使用するため、スクリプトをルートとして実行する必要はありません。

また、asyncio のイベント ループも使用するため、複数の進行中の traceroute または ping を同時に実行し、それらの結果が完了すると処理できます。

「example.com」に traceroute する Python スクリプトを次に示します。

import asyncio
import mtrpacket

async def trace():
    async with mtrpacket.MtrPacket() as mtr:
        for ttl in range(1, 256):
            result = await mtr.probe('example.com', ttl=ttl)
            print(result)

            if result.success:
                break

asyncio.get_event_loop().run_until_complete(trace())

「ttl」を使用したループが使用されるのは、発信パケットの「time-to-live」によって、パケットが期限切れになって元のソースにエラーが返される前に移動するネットワーク ホップの数が決まるためです。

于 2019-02-13T23:57:09.537 に答える
0

root 権限を必要としない単純な tcptraceroute を Python で作成しましたhttp://www.thomas-guettler.de/scripts/tcptraceroute.py.txt

ただし、中間ホップの IP アドレスは表示できません。ただし、ブロックしているファイアウォールがどこにあるかを推測できるため、便利な場合もあります。ルートの最初または最後です。

于 2013-03-27T08:33:47.333 に答える
0

scapyパッケージをチェックアウトすることをお勧めします。これは、Python 用ネットワーク ツールのスイス アーミー ナイフです。

于 2009-07-20T07:42:16.273 に答える
0

ICMP Ping は、ICMP プロトコルの一部として標準です。

Traceroute は、ICMP および IP の機能を使用して、Time To Live 値によってパスを決定します。パスのホップについて通知するのは ICMP TTL EXceeded メッセージであるため、TTL 値を使用すると、IP/ICMP が機能する限り、さまざまなプロトコルで traceroute を実行できます。

リスナーが利用できないポートにアクセスしようとすると、ICMP プロトコル ルールにより、ホストは ICMP Port Unreachable メッセージを送信することになっています。

于 2010-06-04T13:16:41.463 に答える