IPアドレスを変更するプログラムを作成しようとしているのですが、そういう関数は見つからなかったのですがどのような方法がありますでしょうか?
(レジストリの変更?)

SDK、WinXP

このQ&Aに関連する最新のQ&A

A 回答 (5件)

とりあえずWinNT/2000/XPなら


iphlpapi.hの
AddIPAddress
DeleteIPAddress
で変更できるようですね。

http://msdn.microsoft.com/library/default.asp?ur …

参考URL:http://msdn.microsoft.com/library/default.asp?ur …
    • good
    • 0

ANo.2のバッチファイル例です。



--------------------
netsh interface ip set dns name="ローカル エリア接続" source=static addr=123.123.123.123 register=PRIMARY
netsh interface ip set address name="ローカル エリア接続" gateway=192.168.0.1 gwmetric=1
netsh interface ip set address name="ローカル エリア接続" source=static addr=192.168.0.100 255.255.255.0
--------------------
1行目がDNSサーバ、2行がデフォルトゲートウェイ、3行目がIPアドレスとサブネットマスクです。変更不要な行は消しても大丈夫です。
    • good
    • 1

IPパケットのソースアドレスを変更(というか自前で作って送信)するなら特殊なソケットを使うとかあとは


デバイスレベルのアクセスとかがあるんじゃないすかね。

IPアドレスを自由に変更できても正しく使う目的があんま見えないけど。
    • good
    • 0

プログラム的に、直接IPアドレスを変更する方法はわからないんですけど、


コマンドから
Netsh set address コマンド
で変更することができるので、
そういうバッチを作って置いて
プログラムから呼び出すというのはどうでしょう?
(もちろん、#1で言われているような注意が必要なので、こうした変更ができるということは、ネットワーク上の制約がある上でのことですけど)
    • good
    • 0

ご質問の意味がよく分かりませんが?


IPアドレスはハードウエア的情報ですから、ソフトウエアで変更はできないのですけど。
住所の番地とか電話線の電話番号のように、受け取った(割り当てられた)IPアドレスを知る事は可能ですけど、勝手にウソの番地を名乗ることはできません。
IPアドレスを相談して決めるシーケンスはありますが、関数ではなくてプログラムになります。
ご使用のネットワークにより、IPアドレス割り当てのDHCPサーバと相談して打ち合わせるか、ネットワークに接続されている全ての機器と打ち合わせてIPアドレスを変更するかの、どちらかです。
ただ、どちらにしてもWindowsのOSでは無理です。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLAN内IPアドレス使用状況確認方法

LAN内の使用されていないプライベートアドレスを
調べたいのですが、対象PCのOSの設定により
実際電源ONで使用中であってもPINGでは検出で
きないケースがあります。OSの設定は変えずに
PING以外で調べる方法をどなたか教えていただけ
ないでしょうか?よろしくお願い致します。

Aベストアンサー

こちらが参考となるかと思います。
使用中のIPアドレスを調査する
http://www.atmarkit.co.jp/fwin2k/win2ktips/309ipuse/ipuse.html

空いているアドレスなので、invalid でいいのかな?
但し、自PCはどちらにもでてきません。
set pingRange=20←この数値を適当に変えてお試しを。
詳しくは上記リンク先にて。

↓バッチファイルの内容
echo off
cls
set logFile=Ping2Arp.log
set pingRange=20
rem For /l %%i in (1,1,%pingRange%) do ping -w 1 -n 1 192.168.0.%%i & arp -a 192.168.0.%%i |find /i "dynamic" >> %logfile%
For /l %%i in (1,1,%pingRange%) do ping -w 1 -n 1 192.168.0.%%i & arp -a 192.168.0.%%i |find /i "invalid" >> %logfile%
cls
echo ************アドレス一覧
type %logfile%
pause
del %logfile%

こちらが参考となるかと思います。
使用中のIPアドレスを調査する
http://www.atmarkit.co.jp/fwin2k/win2ktips/309ipuse/ipuse.html

空いているアドレスなので、invalid でいいのかな?
但し、自PCはどちらにもでてきません。
set pingRange=20←この数値を適当に変えてお試しを。
詳しくは上記リンク先にて。

↓バッチファイルの内容
echo off
cls
set logFile=Ping2Arp.log
set pingRange=20
rem For /l %%i in (1,1,%pingRange%) do ping -w 1 -n 1 192.168.0.%%i & arp -a 192.168.0.%%i |find...続きを読む

QVC++ .Net2003 SDKプログラムからMFCプログラムへの移行

VC++ C初心者です
自社開発した画像形式の画像を表示するViewerを作成する事になり
SDKで開発を進めていましたが、MFCの方が開発効率が
良さそうなので、必要な部分(ファイルからPixcel単位のRGB値を読み書きする処理)を部品化してヘッダファイル・CPPファイルにまとめてMFCフォームへ移行を始めました

開発環境は
VC++ .Net2003です

上司からMFCベースの簡易Viewer「SimpleImage」(多分マイクロソフトのHPから拾って来たソースと思います)
を受け取り、元プログラムの主要な部分を関数にまとめて移行を始めたのですが、

ビルドでエラーが2つ発生して、先に進めなくなりました

〓エラー(1)〓
SimpleImage fatal error LNK1120: 外部参照 1 が未解決です。

〓エラー(2)〓
SimpleImage error LNK2019: 未解決の外部シンボル
"class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >
__cdecl GetUseFicFileName(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)
" (?GetUseFicFileName@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@@Z) が関数 "
public: void __thiscall CChildView::OnFileOpenimage(void)" (?OnFileOpenimage@CChildView@@QAEXXZ) で参照されました。







移行先のメインCPP内部で「私が作ったファイル
(以後、"abc.h"・"abc.cpp"と呼びます)includeを追記してビルドする処までは、問題無かった(ビルドが出来た)のですが、


メインのCPPファイル内で"abc.h"に記載された関数を呼び出そうとすると上記2つのエラーが出力され、先に進めない状況です


多分、ライブラリ等の参照先が上手に行なえていないのかと思っているのですが、初心者で原因が
まるで特定できないので質問させて戴きました


皆様!助言お願いしますm(__)m

VC++ C初心者です
自社開発した画像形式の画像を表示するViewerを作成する事になり
SDKで開発を進めていましたが、MFCの方が開発効率が
良さそうなので、必要な部分(ファイルからPixcel単位のRGB値を読み書きする処理)を部品化してヘッダファイル・CPPファイルにまとめてMFCフォームへ移行を始めました

開発環境は
VC++ .Net2003です

上司からMFCベースの簡易Viewer「SimpleImage」(多分マイクロソフトのHPから拾って来たソースと思います)
を受け取り、元プログラムの主要な部分を関数にまとめて移行...続きを読む

Aベストアンサー

>#include <atlstr.h>

おそらく不要でしょう。


MFCでは、デフォルトでstdafx.hというプリコンパイル済みヘッダを使用しています。
このため、ウィザードで作成分を含む各ソースでは、
#include "stdafx.h"
と、インクルードする必要があります。

個別のcppファイルでライブラリ等のヘッダをインクルードは基本的に行いません。ライブラリのヘッダを追加したい場合はstdafx.hに追記していきます。

Qホスト名からIPアドレスを検索、設定するバッチファイルを作成したいです

ホスト名からIPアドレスを検索、設定するバッチファイルを作成したいです。。

まず、下記の内容のようなテキストがあります。(仮に『a.txt』とします)
-----------------------
ホスト名1 IPアドレス1
ホスト名2 IPアドレス2
ホスト名3 IPアドレス3
ホスト名4 IPアドレス4

-----------------------

処理としては、
バッチ叩く→ 叩いた端末のホスト名で『a.txt』内を検索→
→ 同じ行のIPを抽出 →IP設定変更 →完
を目指しています。

同じ行のIPを抽出するところで躓いてしまいました…。

良いアイデアはありませんでしょうか。
よろしくお願いします!

Aベストアンサー

ちょこっとIP呼び出すところだけ作ってみました。
バッチを実行するPCのホスト名は環境変数%COMPUTERNAME%で呼び出す前提です。
なので、a.txtにもホスト名は大文字で書いておく必要があります。
あ、あとバッチファイル内の記述を前提にしているので、コマンドラインから実行するときは"%%"を"%"に置き換えてください。
----
for /F "tokens=1,2" %%I in (a.txt) do (
if %%I==%COMPUTERNAME% (
<なにかしらのコマンド. IPは%%Jで呼び出し可>
)
)
----

QIPアドレス表示プログラム

 GetIpAddrTableを使って、自分のパソコンのIPアドレスを表示するプログラムを作成したいのですが、プログラムソースがあれば教えていただけませんか?
お願いします。
OSはWinXPでコンパイラは、Visual Basic.NET Standard Version 2003を使用しています。

Aベストアンサー

>できればC言語の方で記述してもらったほうが幸いなのですが…
>コンパイラは、Visual Basic.NET Standard Version 2003を使用しています。
Visual Basic.NETでは、Cのプログラムはコンパイルできません。
Visual Basic.NETを使用と言うことですので、
カテゴリ違いとは思いましたがVB.NETで書かせていただきました。
勘違いしてすみませんでした。

QIPアドレス検索結果。実際の端末の現在地とことなる位置を回答するのはなぜ?

前回下記の質問をしました。
https://oshiete.goo.ne.jp/qa/9240298.html
IPアドレス検索。結果が異なるのはなぜ?

ある回答より
aguseは管理者を表示するから101.102.128.0 - 101.102.255.255はすべてソフトバンクのある東京。IP広場は実際にそのIPアドレスを利用している場所だから全国ばらばら。
(引用終了)

このお答えにはあるていど納得がいきましたが、まだ疑問が残ります。
というのは
IPアドレス 101.102.241.192 をIPひろば http://www.iphiroba.jp/  で検索した結果は
「京都市」でしたが、実際にはこの端末を利用した際の現在地と異なっているのです。

なぜ現在地と違う場所が、「現在地である」との結果が出たのでしょうか?

Aベストアンサー

プロバイダー以外はIPアドレスからは正確な住所はわかりません。
わかるのはどの地域かくらいです。固定でないIPアドレスだと、IP広場ではいつの時点でのデータを収集したかによりエリアは異なってしまいます。通信会社ではエリアをきっちりと行政単位で管理しているわけではないはずです。

auのスマホではアメリカと出たとの回答がありますが、私のauのIPアドレスを見たら10.x.x.xでした。これはIANA(IPアドレスなどを管理する組織)が持つプライベートIPアドレスなので場所はロサンゼルスになります。家庭内で使われる192.168.x.xと同じで、auの中でしか使われないアドレスです。auの外に出るときには違うグローバルIPアドレスに変換されています。

Qレジストリを変更している最中に値の変更は?

C#であるプログラムをキックさせています。
「キックしたプログラム」はインストールを行いレジストリを作りますが、仕様として「初期値」を作るようにしかできておらず設定が面倒なので「キックするプログラム」がレジストリが作られたことを確認した後、値を突っ込むような作り方を試しています。

プログラムを動かしてわかったのですが、レジストリの存在まで確認できているにも関わらず何故か値の更新がされません。
レジストリを作っている最中に値の書き込みは不可能でしょうか?

また、「キックしたプログラム」はユーザーに再起動をするように求めてきます。
ですので、再起動をする前にレジストリの書き換えをしたいのですがそのあたりをプログラムでコントロールさせることは可能でしょうか。

Aベストアンサー

あんまりピントがあってないかもしれないですが、
> レジストリを作っている最中に値の書き込みは不可能でしょうか?
レジストリが既にある状態で(別プログラムは起動せずに)、ターゲットの値を
書いてみて、上書きできるんでしょうか?
実行権限の関係で書けていないなどということはないでしょうか?

> また、「キックしたプログラム」はユーザーに再起動をするように求めてきます。
> ですので、再起動をする前にレジストリの書き換えをしたいのですがそのあたりをプログラムでコントロールさせることは可能でしょうか。

自分のプログラムのレジストリの書き換えが終わっていない間に、その再起動
ダイアログが表示されたら、ウィンドウタイトルとかを見て、非表示にするとか
できるんじゃないでしょうか。あんまり美しくないし、インストール中に
マウスを連打されて、マウスイベントがバッファに溜まっていたら、無理っぽいですが。

QIPアドレス検索。結果が異なるのはなぜ?

概要
IPアドレス検索をすると、サイトによって結果が異なります。なぜでしょうか?

詳細
とあるIPアドレスがあります。
101.102.241.192
です。

このIPアドレスの発信元がどこなのか、調べてみました。

IPひろば  http://www.iphiroba.jp/  での結果
IPアドレス割当てエリア
国 日本
都道府県(CF値) 京都 ( 29 )
市区町村(CF値) 京都市 ( 14 )
Network Information: [ネットワーク情報]
a. [IPネットワークアドレス] 101.102.240.0/23
b. [ネットワーク名] FON
f. [組織名] ソフトバンクモバイル株式会社
g. [Organization] SoftBank Mobile Corp.
m. [管理者連絡窓口] KM34911JP
n. [技術連絡担当者] KM34911JP
p. [ネームサーバ]
[割当年月日] 2015/08/27
[返却年月日]
[最終更新] 2015/08/27 09:02:02(JST)

となりました

aguse https://www.aguse.jp/ での結果

運営組織
SoftBank Corp.
Tokyo Shiodome Building., 1-9-1, Higashi-shinbashi, Minato-ku, Tokyo, 105-7304, Japan

IPひろばでは地図上のピンは京都市に立ちましたが、aguseでは東京に立ちました。

なぜ結果が違うのでしょうか?

概要
IPアドレス検索をすると、サイトによって結果が異なります。なぜでしょうか?

詳細
とあるIPアドレスがあります。
101.102.241.192
です。

このIPアドレスの発信元がどこなのか、調べてみました。

IPひろば  http://www.iphiroba.jp/  での結果
IPアドレス割当てエリア
国 日本
都道府県(CF値) 京都 ( 29 )
市区町村(CF値) 京都市 ( 14 )
Network Information: [ネットワーク情報]
a. [IPネットワークアドレス] 101.102.240.0/23
b. [ネットワーク名] FON
f. [...続きを読む

Aベストアンサー

aguseは管理者を表示するから101.102.128.0 - 101.102.255.255はすべてソフトバンクのある東京。IP広場は実際にそのIPアドレスを利用している場所だから全国ばらばら。

aguseの説明にサーバーの位置情報を地図で表示しますとありますよ。

QTCP/IP通信型大文字・小文字変換プログラム

TCP/IP通信型大文字・小文字変換プログラムを作りたいです。
しかし、うまく2つのプログラムが接続されません。
恐らく、IPアドレスやホスト名の問題だと思います。
超初心者でそこのところをあまり理解していません。
どなたかプログラムの補足をお願いします。

概要は
・クライアント
キーボードから文字列を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信された文字列に対し、
大文字は小文字に、小文字は大文字に変換して返す。

クライアント側プログラム

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define SOCK_NAME "./socket"

int main()
{
struct sockaddr_in saddr;
int soc;
char buf[1024];

if ( (soc =socket(AF_INET, SOCK_STREAM, 0 ) ) < 0 ) {
perror("socket");
exit(1);
}

memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr=inet_addr("192.168.1.1");
saddr.sin_port=htons(1357);

if(connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("connect");
exit(1);
}
fprintf(stderr, "Connection established: socket %d used.\n", soc);

while(fgets(buf, 1024, stdin)){
if(buf[strlen(buf) -1] == "\n") buf[strlen(buf) -1] = "\0";
write(soc, buf, 1024);
read(soc, buf, 1024);
fprintf(stdout, "%s\n", buf);
}
close(soc);
return 0;

}

サーバー側プログラム

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define SOCK_NAME "./socket"

int main()
{
int i;
int fd1, fd2;
struct sockaddr_in saddr;
struct sockaddr_in caddr;

int len;
int ret;
char buf[1024];

if((fd1 =socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
perror("socket");
exit(1);
}

memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr=INADDR_ANY;
saddr.sin_port=htons(1357);


unlink(SOCK_NAME);
if(bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("bind");
exit(1);
}
if(listen(fd1,5) < 0 ) {
perror("listen");
exit(1);
}
while(1){
len = sizeof(caddr);
if((fd2 = accept(fd1, (struct sockaddr *)&caddr, &len)) < 0){
perror("accept");
exit(1);
}

fprintf(stderr, "Connection established: socket %d used.\n", fd2);

while((ret = read(fd2, buf, 1024)) > 0 ){
fprintf(stderr, "read: &s\n", buf);
for(i=0; i<ret; i++)
if(islower(buf[i]))
buf[i] = toupper(buf[i]);
if(isupper(buf[i]))
buf[i] = tolower(buf[i]);

fprintf(stderr, "write: %s\n", buf);
write(fd2, buf, 1024);
}
close(fd2);
}
close(fd1);

return 0;
}

TCP/IP通信型大文字・小文字変換プログラムを作りたいです。
しかし、うまく2つのプログラムが接続されません。
恐らく、IPアドレスやホスト名の問題だと思います。
超初心者でそこのところをあまり理解していません。
どなたかプログラムの補足をお願いします。

概要は
・クライアント
キーボードから文字列を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信された文字列に対し、
大文字は小文字に、小文字は大文字に変換して返す。

...続きを読む

Aベストアンサー

クライアント側でIPアドレスとして 192.168.1.1を指定していますけど
これはあってますか?

プログラムにバグがあったので、それを修正した上で
ループバックアドレス(127.0.0.1)を指定して試したところ
うまく動作しました。

いきなりサーバーとクライアント両方を試すより、
サーバーは正しく動くのか、
クライアントは正しく動くのか
をそれぞれ試すようにした方がよくはないですか。

サーバーのテストなら telnetでも試せますし。

QIPアドレスの所在地検索について 

こんにちは
私は一か月前からブログを初めて、
そこに忍者アナライズとグーグルアナリティクスをつけてみました。


しばらくは何とも思っていなかったのですが
リピーターの方がどこに住んでいるのだろう
あまり内容を詳しく書きすぎると個人特定されてしまうと思って
都道府県をよくみてしました。


すると一番多く来ているリピーターの方が
忍者では東京都と出て、グーグルでは地方の街の地名が出ました。

疑問に思って、ネットで紹介されているIPアドレス検索で
そのIPを検索すると、サイトによって不明なのか緯度経度(長野あたり)だったり、
グーグルと同じ地方の県名だったりしました。

なぜサイトによって所在地が違うのでしょうか?わざと隠しているとそうなるのでしょうか?

そんなIPアドレス調べられるものを設置した私は
IPアドレス隠したがるリピーターさんにもし設置していると気がつかれたら
嫌われてしまいますか?

それともパソコンに詳しい人なら誰でもやっているものなのでしょうか?

Aベストアンサー

そもそも、OCN以外とか一部のISP以外だとIPアドレス帯がどこに割り振っているか分からないから、あくまでも場所は参考にしかすぎません
各会社が一定の法則に従ってやっているのか適当にしているだけです
IPアドレスの割り当てより分かっても日本国内とかの国でしか分からない場合があります
OCNなどの一部ISPはリモートホストで都道府県名が表示されます

>IPアドレス隠したがるリピーターさんにもし設置していると気がつかれたら
嫌われてしまいますか?

忍者アナライズって左上に表示されていますから、貼り付けたって、思いっきりつけているって分かりますよ
私は、他のサイトにも接続して、表示が遅くなる場合があるので嫌いですね。遅くなると負荷がかかります。他のサイトまで接続履歴が残るもの気にいらないですので・・・
接続したサイトにはログが必ず残ります。(ログが見るようにできないようにしている管理者もいますので)

私は、ログを保存していますので、それだけで分かりますからやる必用もないのでやっていません

QIPアドレスを抽出して出力するプログラム

下記のプログラムはIPアドレスを表示するプログラムです。for文を見てくれたら分かると思いますが、iが0~5まで繰り返し処理されるので、アドレスが5つ表示される結果になります。
このアドレスの先頭の数字(例えば「196.x.x.x」だと196)だけを見て先頭が196から始まるアドレスは表示して、先頭が196以外のアドレスは表示しないようにするにはどう書き加えればうまく実行できますか?
OSはWinXPでコンパイラVC++です。
#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>
int
main()
{
DWORD i;
PMIB_UDPTABLE pUdpTable;
DWORD dwSize = 0;
DWORD dwRetVal = 0;
char *addr_ptr;
if (GetUdpTable(NULL, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
pUdpTable = (MIB_UDPTABLE *) malloc (dwSize);
}
if ((dwRetVal = GetUdpTable(pUdpTable, &dwSize, 0))
== NO_ERROR) {
if (pUdpTable->dwNumEntries > 0) {
for (i=0; i<5; i++) {
addr_ptr = (char *)&pUdpTable->table[i].dwLocalAddr;
printf("Your Address: %s\n",
inet_ntoa(*(struct in_addr *)addr_ptr));
}
}
}
else {
printf("GetUdpTable failed.\n");
LPVOID lpMsgBuf;
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwRetVal,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT), //Default language
(LPTSTR) &lpMsgBuf,
0,
NULL )) {
printf("\tError: %s", lpMsgBuf);
}

LocalFree( lpMsgBuf );
}

return 0;
}

下記のプログラムはIPアドレスを表示するプログラムです。for文を見てくれたら分かると思いますが、iが0~5まで繰り返し処理されるので、アドレスが5つ表示される結果になります。
このアドレスの先頭の数字(例えば「196.x.x.x」だと196)だけを見て先頭が196から始まるアドレスは表示して、先頭が196以外のアドレスは表示しないようにするにはどう書き加えればうまく実行できますか?
OSはWinXPでコンパイラVC++です。
#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>
int
main()
{...続きを読む

Aベストアンサー

 以下のようしては如何でしょう。

for (i=0; i<5; i++) {
char buf[256];
addr_ptr = (char *)&pUdpTable->table[i].dwLocalAddr;
sprintf(buf, "%s",
inet_ntoa(*(struct in_addr *)addr_ptr));
if(strncmp(buf, "196", 3) == 0)
printf("Your Address: %s\n", buf);
}


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報