有什么方法可以改变本机的IP地址,有API吗?

yuanreid 2002-05-31 06:14:03
有什么方法可以改变本机的IP地址,有API吗?
...全文
1019 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
钛哥 2002-08-16
  • 打赏
  • 举报
回复
◎~……~◎
szbug 2002-08-16
  • 打赏
  • 举报
回复
请问楼上GetAdaptersInfo、AddIPAddress、DeleteIPAddress在哪个头文件定义啊?
SessionEnum 2002-08-16
  • 打赏
  • 举报
回复
给你一个改IP的程序!


//------C code in win2k-------//
#include <windows.h>
#include <stdio.h>
#include <iphlpapi.h>

void Usage(void) {
printf("Usage: Ipchange [ -l ] [ -a -n<index id> -i<ip address> -m<subnet mask> ] "
"[ -d -c<context id>]\n\n"
"\t -l List adapter index IDs and IP Address context ID information\n"
"\t -a Add IP Address option\n"
"\t -d Delete IP Address option\n"
"\t -i IP Address to specify with -a option\n"
"\t -m Subnet Mask to specify with -a option\n"
"\t -c IP context ID for an existing IP address\n"
"\t -n Index ID of an existing network adapter\n");
}

void main(int argc, char *argv[]) {
ULONG NTEContext = 0;
ULONG NTEInstance;
IPAddr NewIP;
IPAddr NewMask;
DWORD Index;
DWORD Context;
CHAR NewIPStr[64];
CHAR NewMaskStr[64];

PIP_ADAPTER_INFO pAdapterInfo, pAdapt;
PIP_ADDR_STRING pAddrStr;
DWORD AdapterInfoSize;
DWORD Err;
BOOL OptList = FALSE;
BOOL OptAdd = FALSE;
BOOL OptDel = FALSE;

NewIPStr[0] = '\0';
NewMaskStr[0] = '\0';
Context = Index = -1;
for (int i = 1; i < argc; i++)
{
if ((argv[i][0] == '-') || (argv[i][0] == '/'))
{
switch(tolower(argv[i][1]))
{
case 'l':
OptList = TRUE;
break;
case 'a':
OptAdd = TRUE;
break;
case 'c':
if (strlen(argv[i]) > 2)
Context = atoi(&argv[i][2]);
break;
case 'd':
OptDel = TRUE;
break;
case 'i':
if (strlen(argv[i]) > 2)
strcpy(NewIPStr, &argv[i][2]);
break;
case 'm':
if (strlen(argv[i]) > 2)
strcpy(NewMaskStr, &argv[i][2]);
break;
case 'n':
if (strlen(argv[i]) > 2)
Index = atoi(&argv[i][2]);
break;
default:
printf("default\n");
Usage();
return;
}
}
else
{
printf("else\n");
Usage();
return;
}
}

// Check options
if ((OptAdd && (Index == -1 || NewIPStr[0] == '\0' || NewMaskStr[0] == '\0'))
|| (OptDel && Context == -1))
{
Usage();
return;
}

// Get sizing information about all adapters
AdapterInfoSize = 0;
if ((Err = GetAdaptersInfo(NULL, &AdapterInfoSize)) != 0)
{
if (Err != ERROR_BUFFER_OVERFLOW)
{
printf("GetAdaptersInfo sizing failed with error %d\n", Err);
return;
}
}

// Allocate memory from sizing information
if ((pAdapterInfo = (PIP_ADAPTER_INFO) GlobalAlloc(GPTR, AdapterInfoSize)) == NULL)
{
printf("Memory allocation error\n");
return;
}

// Get actual adapter information
if ((Err = GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize)) != 0)
{
printf("GetAdaptersInfo failed with error %d\n", Err);
return;
}

if (OptList)
{
printf("MAC Address - Adapter\n"
"Index Context Ip Address Subnet Mask\n"
"--------------------------------------------------------------\n");

pAdapt = pAdapterInfo;

while (pAdapt)
{
for (UINT i=0; i<pAdapt->AddressLength; i++)
{
if (i == (pAdapt->AddressLength - 1))
printf("%.2X - ",(int)pAdapt->Address[i]);
else
printf("%.2X-",(int)pAdapt->Address[i]);
}
printf("%s\n", pAdapt->Description);

pAddrStr = &(pAdapt->IpAddressList);
while(pAddrStr)
{
printf("%-10.d%-10.d%-20.20s%s\n", pAdapt->Index, pAddrStr->Context, pAddrStr->IpAddress.String, pAddrStr->IpMask.String);
pAddrStr = pAddrStr->Next;
}

pAdapt = pAdapt->Next;
}
}

if (OptAdd)
{
NewIP = inet_addr(NewIPStr);
NewMask = inet_addr(NewMaskStr);
if ((Err = AddIPAddress(NewIP, NewMask, Index, &NTEContext, &NTEInstance)) != 0)
{
printf("AddIPAddress failed with error %d, %d\n", NTEContext, Err);
return;
}
}

if (OptDel)
{
if ((Err = DeleteIPAddress(Context)) != 0)
printf("DeleteIPAddress failed %d\n", Err);
}
}
huzhangyou 2002-08-14
  • 打赏
  • 举报
回复
所谓MAC地址,不过是一种标时罢了,正如一个人的名字,只是一种称呼,并不能由此判断出什么来,以为绑定了MAC地址,就能够判断出是那台机器用了ip地址上网,其实这种方法是不可靠的,我们可以通过简单的方法来修改mac地址,方法如下:
win2000修改方法:
1、在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0000、0001、0002等主键下,查找DriverDesc内容为你要修改的网卡的描述的,如0000。
2、在其下,添一个字符串,名字为NetworkAddress,值设为你要的MAC地^^^^^【指在0000主键下】址,要连续写。如004040404040。
3、然后到其下NDI\params中加一项NetworkAddress的主键,在该主键下^^^^^【也是指在0000主键下】添加名为default的字符串,值写要设的MAC地址,要连续写,如004040404040。【实际上这只是设置在后面提到的高级属性中的**初始值**,实际使用的MAC地址还是取决于在第2点中提到的NetworkAddress参数,而且一旦设置后,以后高级属性中值就是NetworkAddress给出的值而非default给出的了。】
4、在NetworkAddress的主键下继续添加名为ParamDesc的字符串,其作用为指定NetworkAddress主键的描述,其值可为"MAC Address",这样以后打开网络邻居的属性,双击相应网卡项会发现有一个高级
设置,其下存在MAC Address 的选项,就是你在注册表中加的新项NetworkAddress,以后只要在此修改MAC地址就可以了。
5、关闭注册表,重新启动,你的网卡地址已改。打开网络邻居的属性,双击相应网卡项会发现有一个MAC Address的高级设置项。用于直接修改MAC地址。
在Win9x
1、首先打开注册表,找到HKEY_LOCAL_MACHINE\system\Currentcontrolset\services\classes\net\0000、0001、0002等下,观察DriverDesc内容为你要修改的网卡的描述。
2、在其下,添一个字符串,名字为NetworkAddress,值设为你要的MAC地址,要连续写。如004040404040。
3、然后到其下 NDI\params中加一项NetworkAddress的主键,在该主键下添加名为default的字符串,其值写你要设的mac地址,要连续的写,如004040404040
4、在NetworkAddress的主键下继续添加名为ParamDesc的字符串,其作用为指定nettwork-Address主键的描述,其值可为"MAC Address",这样以后打开网络邻居的属性,双击相应网卡项会发现有一个高级设置,其下存在MAC Address 的选项,就是你在注册表中加的新项NetworkAddress,以后只要在此修改MAC地址就可以了。
只要你知道了对方的ip地址,你可以在dos命令下键入nbtstat -a <对方ip>,就可以直接得到对方的mac地址,然后你修改了你的ip和mac地址,这样,可真是真假难辨了啊。
要不,干脆找一个软件,比如什么r3x什么的,扫描一个ip段,如202.198.XXX.XXX什么的,直接就能够得到ip地址和mac地址的详细信息!!!
所以说,学校绑定ip地址和mac地址,并做按流量收费是不和理的,还不如代理->用户名->密码来得准确!!!






此贴转自编程高手




希望对你又帮助
yuanreid 2002-08-14
  • 打赏
  • 举报
回复
感谢huzhangyou(信仰),又学了不少新东西。不过我需要用编程的方式模拟手工修改自己的IP地址。
还是要谢谢你。
scottlai 2002-08-13
  • 打赏
  • 举报
回复
其实用程式是可以修改本机的本地IP,但我不知道怎么写,可能注册表是一种方法。
大家想想:Windows98自带的“共享上网”的那张磁盘,不就是靠里面的程式修改其它机的IP吗?
annkie 2002-08-13
  • 打赏
  • 举报
回复
Ip伪装如何?
rockhard 2002-08-13
  • 打赏
  • 举报
回复
up
yuanreid 2002-08-13
  • 打赏
  • 举报
回复
yuanreid 2002-06-10
  • 打赏
  • 举报
回复
up
yuanreid 2002-06-08
  • 打赏
  • 举报
回复
城北,我的IP地址不是动态分配的,我需要做双机软件。在双机情况下主用,备用各有一个IP。系统出现问题后,需要将主备用IP互换,也就是分别改IP地址。改本机IP地址应该有方法吧。
各位帮忙啊
781014 2002-06-06
  • 打赏
  • 举报
回复
我说家伙你的问题我回了你那么多,你也回回我的问题啊。我是
cndev里的   城北的风
781014 2002-06-06
  • 打赏
  • 举报
回复
不行改了数据包的内容后,如果数据没有送到目地地址你的系统就不知道不会在发一次的,在是如果别人发数据给你你是收不到的因为你的IP改了,ISP它不知道你传出的不是你的IP。我想你的方法很难实现,到现在
为止我是没有听说过的。
如果 你是在  局域网中我想你应该从服务嚣上来指定IP了,就是说你必须把你的系统做成一个内部网在通过主机与外面联系。主机上搞个防火墙就不会受到攻击了。
samoonm 2002-06-06
  • 打赏
  • 举报
回复
截获所有的数据包,然后修改地址,那不就成了单向的网络传输了?
例如聊天软件之类的不就用不了了吗?
可不可以写程序改变服务器分配给的IP地址?
就像服务器从新分配地址似的。

是否可行?
JackLucifer 2002-06-06
  • 打赏
  • 举报
回复
不知道这个方法是否可以满足你的要求

你不是说是局域网,不连接到internet吗?
那么在两台机器联网后会有一个本地连接,
从右健菜单中选择“状态”,然后选择“属性”,
再选“internet协议(TCP/IP)”的“属性”,
在它的常规页中可以设定IP地址,
这是windows2k下的,
98下好像也可以的,但是我记不的了,很久没有用98了。
至于是否有API可以实现这个功能

肯定有
但是
很可惜
我不知道耶


如果是想修改连接到internet的机器的IP地址的话,
嗯,
我也不知道,
但是感觉上截获所有的数据包,然后修改地址就可以了吧。
具体怎么用程序实现么
呃,
不好意思
我真的不知道
只能提供个想法啦


差API的去
yuanreid 2002-06-06
  • 打赏
  • 举报
回复
up
yuanreid 2002-06-05
  • 打赏
  • 举报
回复
up
yuanreid 2002-06-04
  • 打赏
  • 举报
回复
请 lluunn007(玉笛书生) 详细说明怎样禁用网卡,谢谢
mhappy 2002-06-04
  • 打赏
  • 举报
回复
什么意思? 修改本机发出数据包的地址算不算?
huzhangyou 2002-06-04
  • 打赏
  • 举报
回复
好像linux可以
不过没有试过!!
帮你up1
加载更多回复(16)

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧