Windowsバッチのファイル移動で、同名ファイルが存在していた場合、上書きではなく連番付与したい – windows バッチ

質問:


最終的にやりたいこと
・対象フォルダ(サブフォルダ含む)内にある特定拡張子ファイルのみ、指定フォルダへ移動したい
・同名ファイルが存在していた場合、上書きではなく連番付与したい


試したこと
特定ファイルを指定フォルダに一括移動させるバッチファイルで移動確認は出来たのですが、同名ファイルが存在していた場合、1ファイルに上書きされてしまいます


Q
・同名ファイルが存在していた場合、上書きではなく連番付与する、条件追加が分かりません
・同名ファイルが存在していた場合の条件分岐はどの段階で追加する? list.txt作成する時? それとも、ファイルを1行ずつ処理する時?

質問者: re9

同名ファイルが存在していた場合の条件分岐はどの段階で追加する? list.txt作成する時? それとも、ファイルを1行ずつ処理する時?

list.txt作成時に条件分岐を加えると、ファイル作成前に新規作成された場合上書きされますので、処理する時に追記するべきだと思います。

同名ファイルが存在していた場合、上書きではなく連番付与する、条件追加が分かりません

Powershellの方が連番の取得など細かい操作に向いているので、Powershellで実装例を作ってみました。

# 変数を変更して実行すること
Move-Mp3 -Path "D:testsrc" -Dest "D:testdst" -IsMove $false

<#
.SYNOPSIS
 指定フォルダ以下のファイルを移動またはコピーし、移動先に同名ファイルが存在する場合は連番を付加する

.DESCRIPTION
 指定された移動元フォルダから特定拡張子のファイルを再帰的に取得して、指定された出力先に移動またはコピーする。
 出力先に同名ファイルが存在する場合は連番を付加して上書きを回避する。
 移動元フォルダの構成は再現せず、出力先フォルダ直下に直接移動またはコピーを行う。

.PARAMETER Path
 移動元フォルダのパス。

.PARAMETER Dest
 移動またはコピーする出力先フォルダのパス。

.PARAMETER Filter
 ファイル名や拡張子などのフィルタ。
 省略時は"*.mp3"

.PARAMETER IsMove
 $trueの場合は移動、$falseの場合はコピーを行う。
 省略時は移動する

.NOTES
 出力先フォルダが存在しない場合はエラーとなる。

#>
function Move-Mp3 {
    Param(
        [parameter(mandatory=$true)][String]$Path,
        [parameter(mandatory=$true)][String]$Dest,
        [String]$Filter = "*.mp3",
        [bool]$IsMove = $true
    )

    ls -Path $Path -Filter $Filter -Recurse | foreach {
      $src = $_.FullName
      $name = $_.Name
      $target = "${Dest}${name}" 
      while (Test-Path $target) {
        $f = [System.IO.Path]::GetFileNameWithoutExtension($name)
        $x = [System.IO.Path]::GetExtension($name)
        $r = [regex]"^(.*?)([0-9]+)$" 
        $m = $r.Match($f)
        if($m.Success) {
          # 末尾の数値をカウントアップ
          $index = [int]$m.Groups[2].Value + 1
          $name = "{0}{1}{2}" -f $m.Groups[1].Value, $index, $x
        } else {
          # 末尾に数値がなければ拡張子の前に"-1"を追加
          $name = "{0}-1{1}" -f $f, $x
          $index++
        }
        $target = "${Dest}${name}" 
      }
      if($IsMove) {
        move $src $target
        "$src を $target に移動しました。"
      } else {
        copy $src $target
        "$src を $target にコピーしました。"
      }
    }
}

当初はbatファイルで実装しようとしましたが、連番の抽出などが面倒で挫折しました。
中途半端な実装例でもbatファイルを見たい場合は、履歴から修正前の回答をご参照ください。

出典

Related Posts:

コマンドで「Python Scripts」を指定すると「パスが見つかりません」というエラーになる – windows command-line
質問: Pythonの入門書を見ながら設定をしていますが初めっからつまずいています。たすけて。。 はじめに、ez_setup.pyをDocuments>Python Scripsにダウンロードしました。 それから、コマンドプロンプトにC:¥…¥Documents¥Python Scripts +Enterを打つと、 「指定されたパスが見つかりません。」と表示が出るのですがこれはなんですか? たぶんエラー的なものやつですよね? すごく初歩的なことなのかもしれませんが、説明いただけるとうれしいです。 質問者: tuna コマンド列は空白で区切られる 基本的なコマンド列は、コマンドと、それに与える「コマンドライン引数」からなります。 コマンドライン引数は必要ない事もあり、複数指定できる事もあります。 これらは、空白で区切ります。 コマンド 引数1 引数2 引数3 例えば、cdコマンドは「cd」がコマンド名です。そして、移動先のディレクトリを引数で受け取ります。 「Python_Scripts」というディレクトリに移るのでしたら、以下のようになります。 cd Python_Scripts ここで問題になるのは、引数であるディレクトリ名が空白を含んでいる場合です。 「Python Scripts」に移動しようとして、以下のように実行したとします。 cd Python Scripts これは空白で区切られますから、コマンドがcd、一つ目の引数がPython、二つ目の引数がScriptsと解釈されます。 よって、Pythonというディレクトリへの移動を指示した事になってしまい、そのようなディレクトリが無ければ「パスが見つからない」というエラーになります。 クォート内は空白で分割されない 上記のような状況に対処するため、ダブルクォート(")で囲んだ文字列は分割しないというルールがあります。 cd "Python Scripts" これで、「Python Scripts」へ移動出来ます。 Windows でのディレクトリの区切り記号は「」 質問のコマンドには、ディレクトリを全角の円記号で区切っているという問題もあります。 Windows においては、ここらへんの事情は若干混乱していますので、以下の点を抑えておいて下さい。 Unix のディレクトリ階層の区切りには「/(スラッシュ)」が使われますが、Windows では「(バックスラッシュ)」です。 「(バックスラッシュ)」の字形は「/(スラッシュ)」の傾きの向きを逆にした物です。 但し、一部の環境、フォントによっては別の字形で表示されます。 日本語環境の Windows ...
「Access violation at address~」と表示され処理できません – windows
質問: 下記Windows xp時代から利用されているLoaddata to DBのツールがあります。 実行ファイル名xxxxxx.exeで中身不明です。 長年にわたって使ったツールで多分プログラム自身は問題ないと思います。 処理内容は入力ファイルにあるデータをデータベースへアップロードです。 先日、Windows xpで'xxxxxx.exe'を実行しましたら、下記エラーが表示され処理ができません。 Access violation at address 0048DCBF in module 'xxxxxx.exe'.Read of addres 00000016. 4パターンで入力ファイル別で同じプログラムを使って別々のデータベースへデータアップロード処理を行います。 2パターン(2DB)処理正常で、2パターン(2DB)処理エラーでした。 メモリが不足したときに起こったと判断し、 Windows xpからEXEファイル、dllファイル、必要データをWindows 7へ移行しました。 Windows 7で'xxxxxx.exe'を実行しましたら、 Windows xpと同じパターンでエラーが表示され処理できません。 以前バックアップ取ったEXEファイル、dllファイルを入れ替えてもエラーが表示されます。 その後、PC最適化、エラーチェック、デフラグ、ウイルスチェックなどを行ってから、 一時的に治りましたが、また同じエラーで処理できません。 今回は3パターン(3DB)処理正常で、1パターン(1DB)処理エラーです。 またPC最適化、エラーチェック、デフラグ、ウイルスチェックなどを行っても治りません。 プログラム処理でデータベースが破損されることになったら、Read of addres 00000016. などのエラーは発生されますか? プログラムソースはないので、デバックとかできません。 できるだけエラーを回避してそのツールを利用できればと思います。 どのように対応すれば教えていただけますか。 ...
Stringの連結時のOutOfMemoryExceptionを回避する方法 – windows visual-studio vb.net
質問: VB.netでのWindowsアプリケーション開発をしています。 String文字列の連結においてOutOfMemoryExceptionのエラーがスローされます。 手法としてはSingleの数値をカンマで区切り、1000個のカンマ区切り文字列を作成します。 その文字列は「temp_Str as String」の変数に格納していくのですが、 大型のループ処理で10万件以上作成されたところで上記のエラーが発生します。 (時間にして2~3時間程度経過した時点) 少なくとも数100万件の処理を行いたいのですが、 うまくメモリー管理をする方法はないでしょうか? 今現在GC.CollectやRemove等の処理は入れているのですが、あまり効果がありません。 よろしくお願いいたします。 質問者: nbx1508 「String文字列の連結にはStringBuilderを使うのがいいですよ」と回答を書こうとしてコード例を作ったところ、件数が多すぎてStringBuilderを使ってもOutofMemoryExceptionが出てしまいました。 件数が多くてメモリ上で全件を処理できない場合、行ごとに処理をするよう発想を変えるのがベターだと思います。 この方法なら数100万件を超えても、ディスク容量の許す限りエラーにはなりません。 ※分散処理でDBにでも格納するのがベストかもしれませんが、環境のセットアップなどが必要になるためここでは扱いません。 以下は C:tmp123456789.txt というファイルを一時的に書き出して、各行ごとに処理してからファイルを消すサンプルコードです。 手元の環境では1万行に対して30秒ほどで出力が、80秒ほどで全体の処理が終わりました。 Imports System.IO Module Module1 Sub Main() ...
JavaScriptに最も適したエディターを探しています – javascript windows
質問: JavaScriptのコードを作成したり編集するためのエディターを探しています。 お勧めのものを教えてください。 ※日本語対応のものでお願い致します。 作業環境:Windows7Pro 【質問の背景】 私はWeb系の開発を始めたばかりなのですが、今のところWindows標準のメモ帳でJavaScriptやHTMLのファイルを開いてソースコードの内容を確認しています。 しかしながら、JavaScriptのコードを扱うに当り、HTMLの中に埋め込まれているものを探し出してXXXXXXXX.jsファイルを開いてコードの追加・編集・削除を行うことに手間がかかっています。 そこで、作業の迅速化を図るためにJavaScriptを扱うための比較的良くコードの編集に適したものを、経験者のご意見を参考にして作業を快適に進めていきたいと考えたので、今回の質問に至りました。 質問者: Web_beginner もしエディタの操作に慣れるまで時間をかける余裕があるのでしたら、私もuser2617876さんと同様Vimをおすすめします。Windowsかつ日本語環境とのことなので、Vim — KaoriYa からダウンロードして使ってみるといいと思います。 質問文に JavaScriptのコードを扱うに当り、HTMLの中に埋め込まれているものを探し出してXXXXXXXX.jsファイルを開いてコードの追加・編集・削除を行うことに手間がかかっています とありますが、Vimの場合、ファイルが相対パスで指定されていれば、ファイル名の上にカーソルを持って行ってgfとタイプするだけで目的のファイルが開けます。 また、Web系の開発をされていると、後々Unix系のサーバーにSSH接続してファイルを操作する、という事も必要になるかと思います。Vimはそのようなサーバーでもたいてい利用できますし、場合によってはVimで操作するしかないこともあるかもしれません。なので、とりあえずVimの操作に慣れておくのは損にはならないのではないかな、と思ってお薦めさせていただきました。 簡単なものであればNotepad++を使っています。 多くのプログラミング言語に対応しているので、 新しい言語に触れてみようとするときに向いています。 軽量でそれほど学習コストもかかりませんが、 機能もそれなりです。 本格的な開発をされるなら、 他の方が紹介しているエディターに乗り換えるべきだと思います。 Sublime TextにJavaScript系のプラグインをインストールして使用するという方法もありかなと思います。 http://tomoyamkung.net/2014/03/11/sublimetext3-setting-javascript/ "テキストエディタでjsファイルを編集する"のであればサクラエディタが良いかと思います。 理由としては ・言語ごとの設定が可能(拡張子関連付け・一時適応など) ・言語ごとにカラー強調などの設定が可能 ・拡張で入力保管やキーワードヘルプ機能を使用できる。 以上のような機能が便利です。 自分はPHPなども触るのですが簡単な編集程度であれば此方を使用しています。 有料・無料の指定が無かったので無料のテキストエディタをあげましたが、 有料ですが開発するのであればVisualStudioが便利ですね……。 Web開発でも「visual ...
コマンドプロントのsortの書き換え方法 – windows sort
質問: Windowsでの作業で困ってます。 DOSコマンドのsortをコマンドプロンプトで使い、ファイルの中身をソートして上書き保存したいのですが、方法が分かりません。 質問者: 中西龍登 豚吐露 sort input.txt /o output.txt こゆことです?input.txtがsort対象で、output.txtが結果出力が保存されるfileです。 入力と出力を同じfile名にしたら上書きされますよ。 出典
windows7のpowershellのchcp 65001でutf-8に変更する事が出来ない。 – windows powershell
質問: chcp 65001 でコードベージを変更しようとすると異常終了する。 コードベージを65001のutf-8に変更する方法をお知えて下さい。宜しくお願いします。 質問者: yamada とりあえず手元のWindows 10ではchcp 65001の実行に成功しました。 もし異常終了するのであれば、エラーメッセージやイベントログなどを提示してください。第三者には何が起こっているのか全く分かりません。 なお、質問したまま放置されているwindows7のmingw shellで文字化けするの問題とは状況が異なります。そもそもchcpはコンソール(コマンドプロンプトやPowerShellで使われるあの黒い枠、UNIXでの端末エミュレーターに相当)のコードページを変更するツールです。つまりコンソール内部で動かすプログラムのコードページとコンソールのコードページとを一致させることが目的です。ところがPoerShellでは内部の文字コードがUnicode(UTF-16)と定まっているため、コードページの変更にあまり意味を成しません。 ですので今回の文字化けは不適切な読み込み処理に由来する可能性もあります。何がどう文字化けしたのか再現手順も提示すべきです。 出典
LinuxとwindowsのクロスコンパイルにおけるBitcoindについて – linux windows
質問: 先日よりたびたび申し訳ございません。 現在windows10でWSLを用いてUbuntu内で https://github.com/bitcoin/bitcoin をクローンし、bitcoindを作成しようとしております。皆様からの回答をいただいたことで、ubuntu上でのbitcoindのmake installは成功いたしました。 今回の質問は、上記クロスコンパイルの成果物をwindowsで実行する方法、ならびにbitcoindのパス設定について、方法をご存知の方がいらっしゃいましたら回答いただけますと幸いです。 これまでに質問させていただいた項についてURLを掲載いたしますので、あわせてご確認いただけますと幸いです。 関連質問Bitcoindの構築につきましてBitcoin coreのwindows上での構築について 質問者: UnityBeginner masm どの部分の知識が不足しているのかがよく解らないのですが、 Ubuntu で、bitcoind.exe のあるディレクトリで cp bitcoind.exe /mnt/c/Users/ユーザ名/ (「ユーザ名」の部分は置き換えて下さい) とすれば、Windows のエクスプローラーで見れば C:Usersユーザ名 に bitcoind.exe ができているはずです。 あとは、エクスプローラーでお好きなディレクトリに移動させて、実行すれば良いと思います。 出典
teraterm(Linuxのコマンドライン)で.7zファイルを展開・閲覧・管理方法について教えてください。 – linux windows xml
質問: (Stack Overflow metaの方でも質問させていただきました.以下は質問内容です.) 拡張子が.7zのファイルの解凍し閲覧したいと考えています。 現在teratermを使っています。 たとえば展開したいファイルとしましてstack exchange data dumpの右側に表示されているdownload optionの7Zと表示されている中の.7zファイルです。 それらの277ファイルをteratermに移行する方法、閲覧する方法を詳しく教えてください。 stack exchange data dumpのURL↓https://archive.org/details/stackexchange 使用するデータhttps://archive.org/download/stackexchange 関連する質問 1.Stack Exchange Data Explorer の使い方を教えてください 2.stack overflowの公開データについて利用法やデータ詳細やどのような形で提供されているか等を教えていただきたい(API以外の方法も希望する) 3.Stack Exchange Data Explorer の使い方を教えてください 質問者: ando-rei Community 展開方法は過去の質問で回答があったようなので、ダウンロード方法の例のみ示します。 テスト目的であれば--accept=japanese.stackexchange.com.7zなどで十分かもしれませんね。 wget ...
easyhookでexttextoutwをフックしたい – c# windows
質問: EasyHook-Tutorialsのサンプルを変更して、exttextoutwをフックするようにプログラムを書きました。しかし、notepad.exeで実行してもhookのメッセージが表示されません。 なにが悪いのでしょうか? 変更したコードは下記のとおりです。 FileMonitorHook以外は変更しておりません。 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace FileMonitorHook { public class InjectionEntryPoint: EasyHook.IEntryPoint { ...
Apache/ActiveDirectory認証 認証ユーザIDのデータを加工しActiveDirectoryに検索をする設定方法 – windows apache openldap
質問: 仕事でとあるアプリケーションのApacheを利用し、 認証はActiveDirectoryの情報を利用し認証する必要が発生しました。 環境 サーバA:Apache2.4/Webアプリケーション サーバB:ActiveDirectory 想定仕様 ユーザはブラウザでWebアプリケーションにアクセスすると 認証ダイアログが表示され、ユーザID、パスワードを入れると、 ApacheがActiveDirectoryに問い合わせをし認証をし、Webアプリケーションにログインできる。 上記だけであれば、例えば以下 AuthLDAPUrl"ldap://hogesv01:389/OU=person,dc=hogedomain,dc=jp?userPrincipalName?sub?(objectClass=*)" AuthLDAPBindDN [email protected] AuthLDAPBindPassword userhogeのパスワード Require ldap-attribute objectClass=person のようなapache設定で認証設定が可能だと思います。 今回、問題なのは、 ユーザは「ドメインを抜いたユーザ名を入力する」という要件があることです。 例えば、userPrincipalNameが[email protected]だとすると、 ユーザはログインIDでuser01のみを指定するということです。 Apacheの設定でユーザの認証を、 ユーザIDを前方一致でActiveDirectoryを検索に行き、 userPrinicipalNameで認証を実行が出来る必要があるのですが、 そのような設定方法はapacheでは可能なのでしょうか。 いろいろ調べましたが方法が分からず、 何か良い方法や良いアイディアはないものでしょうか。 ActiveDirectory自体の設定を変えるというのは他社管理サーバのため 難しくApacheの設定でなんとかしたい…というのが想いです。 イメージ ユーザ→→→→→Apache→→→→ActiveDirectory ※Apacheでユーザが入力した値を加工し、ActiveDirectoryを検索に行きたい 何かアイディア/知見があればご教授いただけませんか。 質問者: くまもん sAMAccountName (Windows 2000 より前のユーザー ログオン名) を使ってみてください。 AuthLDAPUrl"ldap://hogesv01:389/OU=person,dc=hogedomain,dc=jp?sAMAccountName?sub?(objectClass=*)" 追記: userPrincipalNameをどうしても使いたいという要件があり、 なおかつ、 ブラウザから入力されたIDをActiveDirectryのuserPrincipalNameで前方一致検索をしたいという要求なのです。。。 これを実現するには Apache の mod_authnz_ldap ...
windows7 mingw windresでsyntax errorになる、修正個所を教えて下さい。 – windows gcc
質問: http://wisdom.sakura.ne.jp/system/winapi/win32/win85.html 上記のサンプルで二番目のリソースがエラーになる。 /*リソーススクリプト*/ KITTY DIALOG 10 , 10 , 100 , 50 FONT 12 , "MS ゴシック" CAPTION "Magical nyan nyan TARUTO" { LTEXT "終了しますnよろしいですか?" , -1 , 5 , ...
漢直winでtt-codeの使い方が分からない [クローズ済み] – windows
質問: windows7で漢直winを使っています。 その中にtt.tblがあり、tt-codeも使える様になっています。 この中で例えばaのキーストロークはどうなるんだろうか。 右表プリフィックスとか左表プリフィックスとかでは 出て来ないんだが。 fjを先頭にしての打鍵と、jfを先頭にしての打鍵 以外にもプリフィックスの指定が有ると思うが そこらへんのキーストロークの指定の仕方が分からない。 aに関しては、漢索窓では▽が出て3の後にQを 打鍵しなさいとなっている。 然し、最初のプリフィックスの▽にする方法が 分からない。 宜しくお願いします。 質問者: yamada Windows7で漢直Win(1.28)を使っている者です。普段は別の漢直を使っているのでTT-codeのことはよく分かりませんが、私に分かる範囲でお答えします。 結論を先に言うと、右表プレフィックスのfjや左表プレフィックスのjfを打ったときに▽や▲マークが表示されるようにはなっていないようです。 tt.tblの中のこの行 #define prefix /▲/26,23/▲○/▲/:/▽/23,26/▽○/▽/ と同じものが漢直Win添付のドキュメントにも引用されていて、「プレフィックス拡張型の入力方式における、文字ヘルプの表示指定です」という説明があるので、漢索窓の表示や44や45で表示されるヘルプ用の設定なのです。 fjやjfと同じように、2ストロークをプレフィックスにして入力できる文字を拡張するには、tt.tblの{と}で囲まれた2階層の親ブロックの中に2階層の子ブロックを作る必要があります。(1打鍵ごとに階層が深くなっていきます) 子ブロックの作り方は、tt.tblをエディタで開いて、fjの両隣のfhとfkで入力される愛と宝を検索してみれば分かります。愛と宝の間には文字の代りに{と}で囲まれた2階層のブロックが入っているはずです。 これと同じ要領で、親ブロックのどこかに文字が割り当てられていない空き地を見つけて、同じ構造の子ブロックを作ってやればいいのです。(このとき、子ブロックの中の{と}で囲まれた孫ブロックを"と"で囲んだ文字に置き換えれば、プレフィックス+1打鍵で文字が入力できることになります) ご質問の主旨と少しずれてしまったかもしれませんが、今のところ私に分かることはこれくらいです。 (プログラミングに関する質問ではないという御意見についての付記) 簡単に回答が得られそうもない質問があることを知り、その質問に回答するためにこのサイトに参加しました。たしかにこれは「漢直Win」というソフトの使い方に関する質問なので、この場にはふさわしい内容ではなさそうです。他のサイトに同じ質問があれば、そちらの方に回答することにします。 出典
Windows 上の Sublime Text 3 に Tern をインストールするには? – windows sublimetext
質問: MACの情報しか見つからないのですが、windows10だと下記のパスに tern_for_sublime-master フ‌​ォルダを入れてインストールをnpmで行う‌​のでしょうか? 参考サイト https://liginc.co.jp/312755 参考サイトを見ると まず初めに C:UsersuserAppDataRoamingSublime Text 3package に tern_for_sublime-master フォルダをそのまま入れてやればよいのでしょうか? 次にgulpを使っているのでnode自体は入っているので、 windows10だと C:UsersuserAppDataRoamingSublime Text 3packagetern_for_sublime-master をカレントディレクトリとしてどんなコマンドを打てばよいのでしょうか? npm install tern ではないですよね? コメントの通りにやってみましたが下記のようにエラーが出ました。 AppDataRoamingSublime Text 3Packagestern_for_sublime-master>npm install npm WARN enoent ENOENT: no ...
C++で作成したDLLをラップするDLLを作りたい – c# c++ windows
質問: WindowsOSで使用するC++で作成したDLLを埋め込んだC#のラッパーDLLを作成したいと考えています。 できればひとつのDLLとしてまとめたいのですが、このようなことは可能ですか? 質問者: abababachaos 質問をするときは最低限のマナーとして、開発環境およびターゲット環境(OS、IDE、.NET Frameworkのバージョン、プロジェクト種別など)に関する情報を詳しく記載するようにしてください。 ひとくちに「C++で作成したDLL」と言っても、様々な実装手法があります。 ネイティブDLLにエクスポートされたC言語関数形式のインターフェイスを、C#マネージコードからP/Invoke (DllImport) で利用していますか? それともC++/CLIでマネージインターフェイスを作成して公開していますか? それともC++/CXでWindows Runtimeインターフェイスを作成して公開していますか? あるいはCOM相互運用ですか? いずれにせよ、(C/C++などで書かれた)ネイティブDLLを、単にC#(.NET言語)から利用するというだけであれば、わざわざマネージアセンブリに埋め込んでラップする必要はありません。DLL参照を解決できる場所(たとえばEXEと同じフォルダー階層など)にDLLを配置すれば、ローダーが探してくれます。 なお、ネイティブDLL(アンマネージDLL)をリソースとしてマネージアセンブリに埋め込み、DllImport属性で指定する方法自体はあるとされています。DllImportAttribute Constructor (String) (System.Runtime.InteropServices) - MSDN ただし、うまく動作しないという事例報告もあります。Embedding unmanaged dll into a managed C# dll - Stack ...
PPPoEグローバルIP偽装について教えて下さい。 – windows http
質問: PPPoEグローバルIP偽装について教えて下さい。 勉強目的で、グローバルIPを偽装してHTTPリクエストを送信し、かつ、 HTTPレスポンスを受信する方法を調べています。 現時点で、以下の方法で可能かなと思っています。 ・送信TCPパケットの送信元IPを任意のグローバルIPにする ・送信TCPパケットのソースルーティングに自ルータのグローバルIPを指定する ・自ルータのDMZ機能等を使用してWANからの受信TCPパケットをLANへ流す そこで、以下①②をご教授下さい。 片方だけでも構いません。 現在以下の構成です。 「クライアントPC←→自ルータ←→終端装置←→雲←→サーバ」 ①グローバルIPを偽装する方法 クライアントPCで発行する送信TCPパケットの送信元IPを任意のグローバルIPにすれば良いのでは? と考えたのですが、よくよく考えるとこれは多分ダメで、 これはLAN内の話になってしまい、 いくらLAN内で偽装しても、WANから出ていく送信TCPパケットの送信元IPはPPPoEで割り当てられたグローバルIPになってしまって、 任意グローバルIPの偽装が出来ないのでは?と考えました。 ※こちら合っていますか? なので、クライアントPCで発行する送信TCPパケットではなく、 自ルータ君が何かしらの方法で任意のグローバルIPに偽装する必要があるのでは?と考えました。 ※こちら合っていますか? 合っている場合、どのようにして任意のグローバルIPに偽装すればいいのでしょうか? 合っていない場合、何が合っていないかを教えて下さい。 ②PPPoEに縛られずに送受信を行う方法 NTTの光フレッツでプロバイダを使用してます。 要はPPPoEです。 ここで以下サイトに「PPPoEなどを用いずにEthernetをそのままインターネットなどに接続することも技術的には可能」 とあります。http://e-words.jp/w/PPPoE.html PPPoEを使わずにインターネットに繋ぐってどういう方法でしょうか? この方法を教えて下さい。 若者世代でPPPoEが当たり前なので、このPPPoE以外でインターネットに繋ぐ方法を知りません。 PPPoEだと、どうしてもプロバイダが発行するグローバルIPに縛られてしまい、 仮に偽装が出来てもプロバイダでブロックされてしまうので、 偽装が出来ないとでは?と考えている為です。 プロバイダに縛られない自由な環境があれば、 自由に偽装が可能なのでは?と考えているのです。 質問者: YYYYY 送信元IPアドレスを偽装したサーバーに接続した場合、サーバーからの応答は本来そのIPアドレスを使用している端末に対してルーティングされます。グローバルIPを使って例示する訳にはいかないので、あえてプライベートIPアドレスを使って説明します。 例えば貴方の端末が本来使用しているグローバルIPが192.168.1.2である場合に、IPアドレス192.168.2.1に偽装したパケットを送信したとします。この場合サーバーからの応答は192.168.2.1の端末が所属するネットワークに向かってルーティングされるので、貴方の端末では受信出来ません。 送信元IPアドレスを偽装する実験をしたいのであれば、グローバルネットワークではなく貴方の管理下のネットワーク内で完結するようにして実験されるのが良いと思います。 出典

You Might Also Like

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です