linuxネットワークプログラミングの高度な章-生のソケット[単純なパケットキャプチャの実装]

1.生のソケット(SOCK_RAW) [物事のインターネットに偏っていますが、それでも紹介します。興味のある人はそれについて学ぶことができます]

  1. システムのコアに実装されているSOCK_STREAMおよびSOCK_DGRAMとは異なるソケット
  2. ローカルネットワークカードにすべてのデータフレーム(データパケット)を導入できます。これネットワークトラフィックの監視ネットワークデータの分析に非常に役立ちます
  3. 開発者は、独自にアセンブルされたデータパケット[関連するプロトコルは以前に導入されています]をネットワークに送信できます。
  4. 高度なネットワークプログラミングで広く使用されています。
  5. ネットワークの専門家であるハッカーは通常、これを使用して特殊なネットワークプログラムを作成します。

 

ストリーミングソケットは、データの送受信のみが可能です:TCPSCTPプロトコルデータ

レポートソケットは送受信のみが可能です:UDPプロトコルデータ 

元のソケットは送受信できます。1。カーネルカーネルがデータパケットを処理していないため、他のプロトコルにアクセスする必要があります。2。送信されたデータを使用する必要があります。元のソケット(SOCK_RAW)3。送受信機能は、図に示すようにrecvfromsendtoを使用します。

 それだけです。元のソケットは、ネットワークカードから直接グリーンチャネルを介してデータを直接取得します

 

2.元のソケット(SOCK_RAW)の作成

intソケット(PF_PACKETSOCK_RAWプロトコル

特徴:

リンクレイヤーの元のソケットを作成します

パラメータ:

プロトコル:受信または送信できるデータパケットのタイプを指定します

ETH_P_IP:IPV4パケット

ETH_P_ARP:ARPパケット

ETH_P_ALL:任意のプロトコルタイプのデータパケット

戻り値:

成功(> 0):リンクレイヤーソケット、失敗(<0):エラー

 

sock_raw_fd = socket(PF_PACKET、SOCK_RAW、htons(ETH_P_ALL));

廃止され、sock_raw_fd = socket(AF_INET、SOCK_PACKET、htons(ETH_P_ALL));は使用されなくなりました 

ヘッドファイル:

#include <sys / socket.h>

#include <netinet / ether.h>

 

シンプルなパケットキャプチャの実現[コードデモ]

#include <iostream>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netinet/ether.h>
#include <unistd.h>
#include <stdio.h>

using namespace std;

int32_t 
main(int argc, const char* argv[])
{
	unsigned char buf[1519]; // 1518 + 1
	int sock_raw_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
	

	while(1) {

		unsigned char src_mac[18] = "";
		unsigned char dst_mac[18] = "";
		recvfrom(sock_raw_fd, buf, sizeof(buf), 0, NULL, NULL);
		//"%x:%x:%x:%x:%x:%x"
		sprintf((char*)dst_mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
		// dst_mac[18] = '\0';
	
		sprintf((char*)src_mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			buf[6],buf[7],buf[8],buf[9],buf[10],buf[11]);
		// src_mac[18] = '\0';
	
		printf("dst_mac: %s\nsrc_mac: %s\n", dst_mac, src_mac);
		
	}
	return 0;
}

効果:


 

おすすめ

転載: blog.csdn.net/qq_44065088/article/details/109240668