問題タブ [raw-sockets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
114 参照

sockets - rawソケットからのIPヘッダーを処理する際のポインターエラーの間接参照

void parse_message(char * buffer、int len){

}

エラー:不完全な型へのポインタの間接参照

ヘッダーファイルにnetinet/ip.hをインクルードしました。上記のコードは、IPヘッダーに含まれるttl値にアクセスするために記述されています。使用済みのrawソケット。

0 投票する
1 に答える
2955 参照

python - Pythonの生ソケットのネットワークインターフェース?

Ethernet II proto 0x8888 で未加工のソケットを使用して、Python でワイヤレス ブリッジ用の小さな構成ユーティリティを作成しています。Python の raw ソケットに関するチュートリアルがいくつかありますが、それらはすべて、ネットワーク インターフェイス (「eth0」、「eth1」など) をハードコードしているように見えます。 (私のラップトップでは「wlan0」)。

私の現在の作業コードは次のとおりです(残念ながらハードコードされた「wlan0」を使用):

ハードコードする代わりに、現在のシステムでネットワーク インターフェイス名を取得する方法はありますか?

私は INADDR_ANY を試しましたが、それもうまくいきません。

0 投票する
2 に答える
639 参照

linux - RAW ソケットを使用して Linux で発信 icmpv6 パケットをトラップする

Linux 上のホストから発信される着信および発信 icmpv6 パケットをキャプチャしようとしています。私はそれを行うために次のプログラムを書きました。このプログラムでは、送信パケットではなく受信パケットをトラップできます。トラッピングは icmpv4 パケット (コードのコメント部分) では正常に機能しますが、icmpv6 パケットでは問題になります。以下で使用した方法と比較して、少し煩わしいパケット フィルタリング (バークレー パケット フィルター) メカニズムの使用には興味がありません。これを行うために使用できる何か他のものがあれば教えてもらえますか?それとも、Linux はこれを行うための他のメカニズムを提供していますか?

0 投票する
5 に答える
10219 参照

linux - MAC 層 (Linux) でのワイヤレス インターフェイス (802.11) へのアクセス

私はここ数日、マニュアル ページ、ドキュメント、その他 Google が持ち出したあらゆるものを読んで過ごしましたが、最初よりもさらに混乱していると思います。

私がやりたいことは次のとおりです。C/C++ を使用した Linux システムでワイヤレス インターフェイス (802.11) を介して、独自のレイヤー 3-x プロトコルでデータ パケットを送受信したいと考えています。ここまでは順調ですね。ビーコン、関連付け、または AP/SSID 関連のものは必要ありません。ただし、データ送信については、MAC レイヤーが「通常どおり」に動作するようにしたいと考えています。つまり、ユニキャスト パケットが ACK され、再送信され、バックオフされます。また、拡張 QoS 機能 (802.11e と 4 つのキューと異なるアクセス カテゴリ)。一方、プロミスキャス モードは問題ではありません。ブロードキャスト パケットと特定のステーションに送信されるパケットのみが必要です。

それについて行く正しい方法は何ですか?raw ソケット アクセスに関するドキュメントのほとんどは、ネットワーク スニッフィングに焦点を当てているようで、役に立ちません。私はしばらくの間モニターモードをいじっていましたが、これまでに読んだことから、受信したパケットはモニターモードなどでACKされません.モニターモードがなければ、代替手段は何ですか? アドホック モードと unix raw ソケットを使用していますか? それとも、ドライバーをいじる必要がありますか?

私は完全な解決策を探しているのではなく、どこから始めるべきか、いくつかの良いアイデアを探しています。socket(2)、socket(7)、および packet(7) の man ページを読みましたが、さまざまなモードでの MAC 層の動作に関しては役に立ちませんでした。

前もって感謝します。

0 投票する
2 に答える
689 参照

c - syn の後に ack を取得する

指定した任意の IP とポート番号で syn パケットをスローする小さなツールをコーディングしました。Wireshark をポップアップすると、送信されたパケットは正常に表示され、エラーも何もなく、通常の TCP SYN のように見えます。パケット。

何らかの理由で、サーバーから ACK が送信されません。したがって、2 つの問題があります。1、ACK 応答なし。2 つ目は、自分のプログラム (bind()?) を介して ack 応答を受信する方法さえわかりません。

オンラインで見つけた syn Flooder の一部のコードを変更しました。これは、いくつかのスクリプト キディ コードが簡単に理解できるように思えたからです。syn リクエストが正当な IP アドレスから送信されるように、コードが変更されています。次のコードは、私の ip+tcp ヘッダーを示しています。

それで、私はそれを送り返します。私は何が欠けていますか?

0 投票する
2 に答える
2294 参照

java - winpcap/libpcap と raw ソケットの比較

IP/ICMP/UDP/TCP パケットなどのネットワーク レベルのパケットを使用する必要があるプロジェクトを開始しました。

これを処理するには、Raw ソケットと Winpcap/libpcap の 2 つの主な方法があります。

pcap が OS にドライバーをインストールし、プログラマーがパケットをキャプチャして送信できるようにすることを知っています。一方、Windows 7 以降では、いくつかの制限がある raw ソケットがあります。

このプロジェクトでは、いくつかの IP/ICMP/UDP/TCP パケットをルーターに送信し、IP-IdentifierTTL、 ... などの応答を分析する必要があります。また、Linux と Windows で動作するようにしたいです。

これら 2 つのアプローチの比較を挙げていただけますか?

0 投票する
2 に答える
3751 参照

c - RAW ソケット - イーサタイプと受信アルゴリズム - C

私はC言語で生のソケットを扱っています。生のイーサネット パケットを送受信する必要があります。パケットは、IEEE 802.3 ヘッダーで開始する必要があります。

MAC DST [0 ~ 5] - MAC SRC [6 ~ 11] - ETH タイプ [12 ~ 13]

Wireshark でパケットをキャッチすると、次の構造が表示されます。

MAC DST [0-5] - MAC SRC [6-11] - 長さ [12-13] - トレーラー [14-58]-....

これは私のコードです:

それは単なるwiresharkの「問題」ですか?何か案は?

2 つ目の問題は、生のメッセージの受信に関するものです。プロセスは recvfrom でスタックしています。

これは私のコードです:

私たちを手伝ってくれますか?

前もって感謝します!

0 投票する
3 に答える
1268 参照

c - Filter packets in network stack while sniffing packets on Linux?

I have a question for the Low-level networking/Linux gurus,

I have to build two tools for a security project at my university. The first tool is an ARP Poisonning attacker which will poison the ARP cache from a remote host in order to retrieve the data he is sending to another host. I wrote this tool in C using RAW sockets and it works perfectly, i am able to intercept the data transmitted from a host A to a host B and from the host B back to the host A.

The problem comes when writing the second tool which is a sniffer whose purpose is to read/edit/drop packets coming from host A or host B. I imagined a system where when I spot a packet coming from one of those hosts, my program will ask me if I want to let this packet pass, if I want to modify it or if I simply want to drop it. I activated the IP forwarding in linux using

and i am able to read all the data travelling between the two hosts. But i don't know how to edit/drop those packets since it is the role of linux's network stack to manage the input and the output of the packets coming from my network interface. I'm acting only as a passive attacker if you want.

My first idea was to disable the ip forwarding and manage the routing of the packets myself. But when I disable the ip forwarding, I am simply not able to get any data coming from A or B, this is because the linux's network stack drops automatically the packets in kernel mode which IP address is not destined to my computer.

I tried then to activate the promiscuous mode, but this was unecessary since this mode only operates on the physical layer (sees if the target MAC address in the Ethernet received packet matches the MAC address on the local interface). So basically, promiscuous mode helps us to avoid the physical filter of the linux's stack but not the logical one (the target IP address in the packet I am receiving is B's IP address and not mine, so linux's network stack simply drops the packet).

So my question is, how can I manage to edit the packets I am receiving and send them back or simply dropping them if I want to. I know this is a tricky question, I have made some research to find the solution on my own but I didn't find a satisfying answer.

I know there is a solution with iptables, we can ask him to let pass some packets from a certain IP address, but I don't want a solution involving a third-party tool, I want to encapsulate everything in my program.

For information, the development environment is Linux/Ubuntu Kernel 3.0.0-16, and everything is made using the C language.

0 投票する
2 に答える
1537 参照

c - ラップトップ間の直接ピアツーピアWi-Fi通信を確立します

TL;DRは下部にあります

私は、2台のラップトップ(両方ともUbuntuを実行している)が、APまたはアドホックのいずれかによってワイヤレスネットワークを介して接続されていなくても、基本的なメッセージをやり取りできるようにする方法を模索してきました。 。アドホックネットワークは私が探しているものではないことをここで繰り返し述べたいと思います。私はここで多くの同様の質問を答えとして見てきました。

私が求めているのは、どうすればこれを達成できるかということだと思います。私が本当に必要としているのは、あるコンピュータがパケットを送信できるようにし、次に別のコンピュータが何らかのパケットスニファを介してそれを受信できるようにすることです。

現在:両方のラップトップをモニターモード(aircrack-ngのairmon-ngから作成されたmon0インターフェイス経由)にして、近くのトラフィックをスニッフィングできるようにしています(Wireshark、tcpdump、tcpcump.orgのサンプルlibpcapコードを使用し、rawソケットを開いてすべてのパケットを印刷します。何か別のことをしている/何かを除外している可能性があると思ったという理由だけで、それぞれを試しました)。また、rawソケットを開いて、細工されたイーサネットフレームを空中に送信するという非常に基本的なプログラムもありますが、2台のマシンに相手のパケットを表示させることができません。各マシンで実行されているスニファーは、そのマシンから出て行くパケットのみを見ることができます(近くのビーコンに加えて/エリア内のwifiからのトラフィックを制御します)。

重要かもしれないことに注意するいくつかの事柄は次のとおりです。

-送信しているパケットは、Wireshark(送信マシン上のみ)に不正な形式の802.11パケットとして表示されます(おそらく、今のところジャンクデータで埋めているだけだからです)。私は他のラップトップもそれらを不正な形式のパケットと見なすだろうという印象を受けましたが、何も得られません

-私が使用しているソケットは、socket(PF_PACKET、SOCK_RAW、ETH_P_ALL)の呼び出しからのものです。生のソケットは私が最近気付いたものなので、それらがどのように機能するか誤解する可能性がありますが、私の印象では、レイヤー2パケットを手作業で作成し、ワイヤー/空気に直接出荷できます。

なぜ私がこのようなことをしたいのか知りたいのなら、それは私が取り組んでいるプロジェクトの好奇心と研究の一部です。アドホックネットワークをセットアップするプロセスを合理化/自動化したいのですが、ここでやろうとしているのは、ラップトップが作成しようとしているアドホックネットワークの詳細を把握するために小さな交換を行うことです。次に、一方の人が明示的にネットワークを設定したり、両方の人にネットワークの名前などを事前に決定させたりして、両方のコンピュータに常にその特定のネットワークへの接続を試みさせる代わりに、そのネットワークを自動的に作成/参加します。

コードが機能するかどうかではなく、このプロセスを正しい方法で進めているかどうか、誰かが私の(非常に基本的な、Stack Overflowの別の投稿から取得した)rawソケットコードを投稿すると役立つと思われる場合は、もっと興味があります。私は出来ます。

編集:これを機能させることができれば、手順を含むコードの完全なセットを投稿できてうれしいです。私はインターネット上でこのトピックに関する多くの有用な情報を見つけることができませんでした、そして私は同じことをしようとしている将来の人々のためにそれを載せたいと思います。

TL; DRあるラップトップからパケットを送信し、ある種のパッケンスニファを介して別のラップトップでそれをピックアップしたいと思います。Wi-Fiネットワークやアドホックネットワークは含まれていません。少量のデータを送信する目的でAPのビーコンフレーム(または同様のもの)をスプーフィングすることに似たもの。

編集2:少し考えた後、おそらく私が探しているのは、ある種の生の802.11の使用ですか?Wi-Fiラジオを直接制御できますか?そのようなことは可能ですか?

0 投票する
1 に答える
170 参照

c - PING は 1 時間後にタイムアウトします

より大きなコードの一部として ping コマンドを実装するコードがあります。

シナリオは次のとおりです。

  1. 「-c」または「-t」オプションを指定して ping を実行します。
  2. 続いて Ctrl+C で終了
  3. 約 1 時間後、ping が失敗することがわかりました。

「ソケット」呼び出しは次のとおりです。 sock = socket(IP_AF_INET, IP_SOCK_RAW, IP_IPPROTO_ICMP);

recvfrom を呼び出す前に、ソケットは 1 秒のタイムアウト値に設定されます。ping が失敗すると、errno が EAGAIN に設定されていることがわかります。

いくつかのテストを試しましたが、Ctrl+C を押したときにソケットが閉じられていないことが原因であると考えています。

私の質問は次のとおりです。上記のシナリオの場合のように、ソケットを閉じないと直面する可能性のある問題は何ですか?