PHP の自己構築 IP ヘッダーを使用するにはどうすればよいですか?
PHP に独自に構築された IP ヘッダーの使用方法を教えてください
- PHP コード
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><?php //数据 $dns_id = "\x80\xc1"; $dns_flags = "\x01\x00"; $dns_count_queries = "\x00\x01"; $dns_count_answers = "\x00\x00"; $dns_count_auth_rr = "\x00\x00"; $dns_count_add_rr = "\x00\x00"; $dns_qry_name = "\x02\x69\x70\x02\x63\x6e\x00"; $dns_qry_type = "\x00\x01"; $dns_qry_class = "\x00\x01"; $dns = $dns_id . $dns_flags . $dns_count_queries . $dns_count_answers . $dns_count_auth_rr . $dns_count_add_rr . $dns_qry_name . $dns_qry_type . $dns_qry_class; //IP头 $ip_version = "\x45"; //4位版本 $ip_hdr_len = ""; // 4位首部长度 $ip_dsfield = "\x00"; //8位服务类型 $ip_len = pack('n*',28 + strlen($dns)); //16位总长度 $ip_id = "\x55\xf0"; //16位标识 $ip_flags = "\x00"; //3位标识 $ip_frag_offset = "\x00"; // 13位偏移 $ip_ttl = "\x80"; //8位生存时间 $ip_proto = "\x11"; //8位协议 $ip_src = ipto16("192.168.1.100"); //32位源IP $ip_dst = ipto16("8.8.4.4"); //32位目的IP $ip_checksum = ipchecksum($ip_version,$ip_hdr_len,$ip_dsfield,$ip_len,$ip_id,$ip_flags,$ip_frag_offset,$ip_ttl,$ip_proto,$ip_src,$ip_dst); //16位首部效验和 $ip_header = $ip_version . $ip_hdr_len . $ip_dsfield . $ip_len . $ip_id . $ip_flags . $ip_frag_offset . $ip_ttl . $ip_proto . $ip_checksum . $ip_src . $ip_dst; //UDP头 $udp_srcport = "\xfc\x39"; //16位源端口 $udp_dstport = "\x00\x35"; //16位目的端口 $udp_length = pack('n*',8 + strlen($dns)); //16位UDP长度 $udp_checksum = udpchecksum($ip_src,$ip_dst,$ip_proto,$udp_length,$udp_srcport,$udp_dstport,$dns); //16位UDP效验和 $udp = $udp_srcport . $udp_dstport . $udp_length . $udp_checksum; //$buf = $ip_header . $udp . $dns; $buf = $udp . $dns; function send($host,$port,$buf,$dns_flags) { // $socket = socket_create(AF_INET, SOCK_PACKET, getprotobyname("ip")); $socket = socket_create(AF_INET, SOCK_RAM,1); $timeout = array('sec'=>1,'usec'=>500000); // socket_set_option($socket,IPPROTO_IP,IP_HDRINCL,SO_RCVTIMEO,$timeout); socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$timeout); // while(1) socket_sendto($socket, $buf, strlen($buf), 0, $host, $port); } function udpchecksum($ip_src,$ip_dst,$ip_proto,$udp_length,$udp_srcport,$udp_dstport,$dns) { $data = $ip_src . $ip_dst . "\x00" . $ip_proto . $udp_length . $udp_srcport . $udp_dstport . $udp_length . "\x00\x00" . $dns; if (strlen($data)%2) $data .= "\x00"; $bit = unpack('n*', $data); $sum = array_sum($bit); while ($sum >> 16) $sum = ($sum >> 16) + ($sum & 0xffff); return pack('n*', ~$sum); } function ipchecksum($ip_version,$ip_hdr_len,$ip_dsfield,$ip_len,$ip_id,$ip_flags,$ip_frag_offset,$ip_ttl,$ip_proto,$ip_src,$ip_dst) { $data = $ip_version . $ip_hdr_len . $ip_dsfield . $ip_len . $ip_id . $ip_flags . $ip_frag_offset . $ip_ttl . $ip_proto . "\x00\x00" . $ip_src . $ip_dst; $bit = unpack('n*', $data); $sum = array_sum($bit); while ($sum >> 16) $sum = ($sum >> 16) + ($sum & 0xffff); return pack('n*', ~$sum); } function ipto16($ip) { $tmp = explode(".",$ip); $ip = ""; foreach($tmp as $a => $b) { $tmp = dechex($b); if (strlen($tmp)==1) $tmp = "0" . $tmp; $ip .= $tmp; } $ip = pack("h*",$ip); return $ip; } send("8.8.4.4",53,$buf,$dns_flags);
これは、指定された DNS サーバーに指定されたドメイン名の IP 情報を問い合わせるプログラムですWireshark パケット キャプチャでテストできますが、ここでは独自のネットワーク層、つまり IP ヘッダーを使用しません。
put
$buf = $ip_header . $dns;
//$buf . $dns;
$buf = $udp;
に変更されました。 = $udp . $dns;
結果はまだ機能しません。send 関数の問題について、修正方法を教えてください
----- -解決策------------------ 何をしているのか分かりませんか? sock パケットの使用はユーザー レベルで行う必要があります
カプセル化された IP は次の層で行う必要があります

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











インターネットにアクセスするには、インターネットに接続するときに正しい DNS を使用する必要があります。同様に、間違った DNS 設定を使用すると、DNS サーバー エラーが発生しますが、このときは、ネットワーク設定で DNS を自動的に取得するように選択することで問題を解決できます。ソリューション。 win11 ネットワーク dns サーバー エラーを解決する方法. 方法 1: DNS をリセットする 1. まず、タスクバーの [スタート] をクリックして入力し、[設定] アイコン ボタンを見つけてクリックします。 2. 次に、左側の列の「ネットワークとインターネット」オプションコマンドをクリックします。 3. 次に、右側で「イーサネット」オプションを見つけ、クリックして入力します。 4. その後、DNSサーバーの割り当ての「編集」をクリックし、最後にDNSを「自動(D)」に設定します。

1. ブラック/ホワイト リストの IP 制限付きアクセス設定 nginx ブラック リストとホワイト リストを設定するにはいくつかの方法がありますが、ここでは一般的に使用される 2 つの方法のみを紹介します。 1. 最初の方法:allow、denydeny、およびallow命令はngx_http_access_moduleに属しており、nginxはデフォルトでこのモジュールをロードするため、直接使用できます。この方法は最も単純で直接的です。この設定はファイアウォールの iptable に似ています。使用方法: 構成ファイルに直接追加します: #Whitelist 設定の後に、アクセス可能な許可 IPlocation/{allow123.13.123.12;allow23.53.32.1/100;denyall;}#ブラックリスト設定、

場合によっては、1 つの LAN カードに複数のアドレスを割り当てる必要があります。たとえば、一意の IP アドレスで複数の Web サイトを実行する必要がある場合や、アプリケーションを異なる IP アドレスにバインドする必要がある場合などです。 1 つのネットワーク インターフェイス カードまたは LAN カードに複数のアドレスを割り当てる方法を考えている場合は、この記事がそれを実現するのに役立ちます。以下の手順を最後まで実行すれば完了です。それでは始めましょう! 1 つの LAN カードに複数の IP アドレスを割り当てる ステップ 1: Windows + R キーを同時に使用して実行プロンプトを開き、「ncpa.cpl」と入力し、Enter キーを押して「ネットワーク接続」ウィンドウを開きます。ステップ 2: ネットワーク アダプタの [イーサネット] または [WiFi] オプションを右クリックし、[プロパティ] をクリックします。ステップ 3: [プロパティ] ウィンドウから

Windows ユーザーは、システム上のブラウザで Web ページを参照したり読み込んだりできない場合、この問題を引き起こす可能性のあるすべての要因を思いつきます。多くの Windows ユーザーはシステム上でこの問題を解決していますが、「DNS サーバーが応答していません」というエラー メッセージが表示され、安定したインターネット接続を使用するためにこの問題を解決する方法がわかりません。この記事では、この問題を確実に解決する解決策を考え出しました。ただし、事前にこれらの解決策を試してください。ルーターを再起動して、これが問題の原因であるかどうかを確認してください。ブラウザのアプリケーションを変更します。ただし、Microsoft Edge ブラウザを使用している場合は、それを閉じて Google を開きます。

エラーの理由は、urllib3 ライブラリの例外タイプである NameResolutionError(self.host,self,e)frome です。このエラーの理由は、DNS 解決が失敗したこと、つまり、ホスト名または IP アドレスが試みられたことです。解決できるものが見つかりません。これは、入力された URL アドレスが間違っているか、DNS サーバーが一時的に利用できないことが原因である可能性があります。このエラーを解決する方法 このエラーを解決するにはいくつかの方法があります。 入力された URL アドレスが正しいかどうかを確認し、アクセス可能であることを確認します。 DNS サーバーが利用可能であることを確認します。コマンド ラインで「ping」コマンドを使用してみてください。 DNS サーバーが利用可能かどうかをテストします。プロキシの背後にある場合は、ホスト名の代わりに IP アドレスを使用して Web サイトにアクセスしてみてください。

PHP および UDP プロトコルを使用して非同期通信を実装する方法 最新のインターネット アプリケーションでは、非同期通信は非常に重要な方法となっています。非同期通信を使用すると、メインスレッドをブロックすることなくユーザーリクエストを同時に処理できるため、システムのパフォーマンスと応答速度が向上します。人気のバックエンド プログラミング言語である PHP は、UDP プロトコルを使用して非同期通信を実現する方法を教えてください。この記事では、PHP で UDP プロトコルを使用して簡単な非同期通信を実装する方法を、具体的なコード例を添付して紹介します。 1. UDP プロトコルの概要 U

DNS (DomainNameSystem) は、ドメイン名を対応する IP アドレスに変換するためにインターネットで使用されるシステムです。 Linux システムでは、DNS キャッシュはドメイン名と IP アドレス間のマッピング関係をローカルに保存するメカニズムです。これにより、ドメイン名解決の速度が向上し、DNS サーバーの負担が軽減されます。 DNS キャッシュを使用すると、システムはその後同じドメイン名にアクセスするときに、毎回 DNS サーバーにクエリ要求を発行する必要がなく、IP アドレスを迅速に取得できるため、ネットワークのパフォーマンスと効率が向上します。この記事では、Linux で DNS キャッシュを表示および更新する方法、関連する詳細およびサンプル コードについて説明します。 DNS キャッシュの重要性 Linux システムでは、DNS キャッシュが重要な役割を果たします。その存在

Microsoft は以前、win11 用の DNS 暗号化サービスを提供していましたが、多くのユーザーは win11 の暗号化された DNS の使用方法を知りません。実際には、ネットワーク設定で DNS 設定を開くだけで済みます。 win11 暗号化 DNS に関する詳細なチュートリアル: 1. まずディスクに入り、暗号化するフォルダーを見つけます。 2. 次に、右側の「イーサネット」を開きます。 3. 次に、下の DNS サーバーの割り当てを見つけて、「編集」をクリックします。 4. 「自動 (DHCP)」を「手動」に変更した後、下の「IPv4」を開きます。 5. オンにしたら、優先 DNS に「8.8.8.8」と入力します。 6. 次に、優先 DNS 暗号化を「暗号化のみ (HTTPS 経由の DNS)」に変更します。 7. 変更が完了したら、「保存」をクリックすると、
