导航:首页 > IDC知识 > 获取外网ip域名

获取外网ip域名

发布时间:2020-11-29 23:39:45

1、vb 如何获取外网ip?

vb中从域名得到IP及从IP得到域名 

Private Const WS_VERSION_REQD = &H101 

Private Const WS_VERSION_MAJOR = WS_VERSION_REQD &H100 And &HFF& 

Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF& 

Private Const MIN_SOCKETS_REQD = 1 

Private Const SOCKET_ERROR = -1 

Private Const WSADescription_Len = 256 

Private Const WSASYS_Status_Len = 128 

Private Type HOSTENT 

hname As Long 

hAliases As Long 

hAddrType As Integer 

hLength As Integer 

hAddrList As Long 

End Type 

Private Type WSADATA 

wversion As Integer 

wHighVersion As Integer 

szDescription(0 To WSADescription_Len) As Byte 

szSystemStatus(0 To WSASYS_Status_Len) As Byte 

iMaxSockets As Integer 

iMaxUdpDg As Integer 

lpszVendorInfo As Long 

End Type 

Private Declare Function gethostbyaddr Lib "WSOCK32.DLL" (addr As Any, ByVal _ 

byteslen As Integer, addrtype As Integer) As Long 

Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long 

Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _ 

wVersionRequired&, lpWSAData As WSADATA) As Long 

Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long 

Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _ 

hostname$) As Long 

Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, _ 

ByVal hpvSource&, ByVal cbCopy&) 

Function hibyte(ByVal wParam As Integer)  注释:获得整数的高位 

hibyte = wParam &H100 And &HFF& 

End Function 

Function lobyte(ByVal wParam As Integer)  注释:获得整数的低位 

lobyte = wParam And &HFF& 

End Function 

Function SocketsInitialize() 

Dim WSAD As WSADATA 

Dim iReturn As Integer 

Dim sLowByte As String, sHighByte As String, sMsg As String 

iReturn = WSAStartup(WS_VERSION_REQD, WSAD) 

If iReturn <> 0 Then 

MsgBox "Winsock.dll 没有反应." 

End 

End If 

If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then 

sHighByte = Trim$(str$(hibyte(WSAD.wversion))) 

sLowByte = Trim$(str$(lobyte(WSAD.wversion))) 

sMsg = "Windows Sockets版本 " & sLowByte & "." & sHighByte 

sMsg = sMsg & " 不被winsock.dll支持 " 

MsgBox sMsg 

End 

End If 

If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then 

sMsg = "这个系统需要的最少Sockets数为 " 

sMsg = sMsg & Trim$(str$(MIN_SOCKETS_REQD)) 

MsgBox sMsg 

End 

End If 

End Function 

Sub SocketsCleanup() 

Dim lReturn As Long 

lReturn = WSACleanup() 

If lReturn <> 0 Then 

MsgBox "Socket错误 " & Trim$(str$(lReturn)) & " occurred in Cleanup " 

End 

End If 

End Sub 

Sub Form_Load() 

注释:初始化Socket 

SocketsInitialize 

End Sub 

Private Sub Form_Unload(Cancel As Integer) 

注释:清除Socket 

SocketsCleanup 

End Sub 

Private Function getip(name As String) As String 

Dim hostent_addr As Long 

Dim host As HOSTENT 

Dim hostip_addr As Long 

Dim temp_ip_address() As Byte 

Dim i As Integer 

Dim ip_address As String 

hostent_addr = gethostbyname(name) 

If hostent_addr = 0 Then 

getip = ""  注释:主机名不能被解释 

Exit Function 

End If 

RtlMoveMemory host, hostent_addr, LenB(host) 

RtlMoveMemory hostip_addr, host.hAddrList, 4 

ReDim temp_ip_address(1 To host.hLength) 

RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength 

For i = 1 To host.hLength 

ip_address = ip_address & temp_ip_address(i) & "." 

Next 

ip_address = Mid$(ip_address, 1, Len(ip_address) - 1) 

getip = ip_address 

End Function 

Private Sub Command1_click() 

Dim str As String 

str = getip(Text1.Text) 

If str = "" Then 

Text2.Text = "主机名不能被解释" 

Else 

Text2.Text = str 

End If 

End Sub 

Private Function getname(addrstr As String) As String 

Dim hostent_addr As Long 

Dim host As HOSTENT 

Dim addr(0 To 50) As Byte 

Dim addrs As String 

Dim hname(1 To 50) As Byte 

Dim str As String 

Dim i As Integer, j As Integer 

Dim temp_int As Integer 

Dim byt As Byte 

str = Trim$(addrstr) 

i = 0 

j = 0 

Do 

temp_int = 0 

i = i + 1 

Do While Mid$(str, i, 1) >= "0" And Mid$(str, i, 1) <= "9" And i <= Len(str) 

temp_int = temp_int * 10 + Mid$(str, i, 1) 

i = i + 1 

Loop 

If temp_int <= 255 Then 

addr(j) = temp_int 

j = j + 1 

End If 

Loop Until Mid$(str, i, 1) <> "." Or i > Len(str) Or temp_int > 255 

If temp_int > 255 Then 

getname = "地址非法" 

Exit Function 

End If 

hostent_addr = gethostbyaddr(addr(0), j, 2) 

If hostent_addr = 0 Then 

getname = "此地址无法解析" 

Exit Function 

End If 

RtlMoveMemory host, hostent_addr, LenB(host) 

RtlMoveMemory hname(1), host.hname, 50 

j = 51 

For i = 1 To 50 

If hname(i) = 0 Then 

j = i 

End If 

If i >= j Then 

hname(i) = 32 

End If 

Next i 

getname = Trim$(StrConv(hname, vbUnicode)) 

End Function 

Private Sub Command2_Click() 

Dim name As String 

name = getname(Text2.Text) 

If name = "" Then 

name = "此地址没有域名" 

End If 

Text1.Text = name 

End Sub

2、外网如何获取内网的IP?

内网IP只能在内copy网局域网访问连接,在外网是不能认识内网IP不能访问的。有路由权限,且路由有固定公网IP,可以通过路由的端口映射,实现外网访问内网。如无路由,或路由无公网IP,需要借助第三方开放的nat123端口映射网络辅助实现外网访问内网。

端口映射网络辅助的好处是适用于任何网络环境,外网访问内网的实现过程:

1.在内网安装并启用nat123端口映射。添加映射,配置内外网映射信息,对应内网IP端口和外网自己的域名。外网地址可直接使用提示默认域名。

2.NAT映射后,通过域名访问,即可以连接内网对应IP应用。

3、WebApi中,怎么获取接口调用者的外网ip地址

It's possible to do that, but not very discoverable - you need to use
the property bag from the incoming request, and the property you need
to access depends on whether you're using the Web API under IIS
(webhosted) or self-hosted. The code below shows how this can be done.

private string GetClientIp(HttpRequestMessage request)
{
if (request.Properties.ContainsKey("MS_HttpContext"))
{
return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
}

if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
RemoteEndpointMessageProperty prop;
prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
return prop.Address;
}

return null;
}

4、我有服务器、固定外网IP,可以本地浏览,如何让外网通过固定IP或者域名来访问。我的是wamp环境

先确认你的IP是不是外网(公网)IP,如果是就一定能访问(除非你的IP被封了,国内不存在此问题),如果你的是内网就要做端口映射了(如果可以的话)

5、获取本机外网实际ip

如果你使用了路由器,那么直接在路由器的管理页面中就能看到IP,Wan口的IP地址就是你的出口IP

如果Wan口IP是一个私有IP地址(10.X.X.X或192.168.X.X或172.16.X.X-172.31.X.X),说明你的WAN口仍处于局域网下,外网无法访问本机(除非你与你的运营商联系为你做端口映射,可能要额外收费),如果Wan口IP是公网地址(除上述几个私有IP地址段外),你可以按以下步骤操作

进入路由器管理

找到设置DMZ区或虚拟服务器的设置项(TP-link在转发规则下)

设置DMZ区或虚拟服务器,DMZ区的主机将直接暴漏在外网,外网可以通过你的公网IP直接访问DMZ主机上任何开放的端口,而设置虚拟服务器只将指定的内网机器的指定端口开放,外部只能访问该端口的服务网(HTTP服务是80,ftp是21)

注意如果你的外网IP不是固定的,那么每次别人都要访问你当前的外网IP才可以,你可以使用动态DNS服务为你的IP动态绑定域名

开放DMZ或虚拟服务器后,指定主机的IP地址(内网IP,如192.168.0.101这种)要固定,因为它是按IP开放的端口,如果你今天主机A用IPA,主机B用IPB,将IPA开放,则外网可访问主机A的服务,而明天你又把主机A的IP改为IPC,那其他人访问你的外网IP时路由器仍会将IPA对应的主机返回给外网,所以你可能需要Mac地址绑定

6、WebApi中,怎么获取接口调用者的外网ip地址

不是默认的 WSDL 都会给一个 transport 的地址么,那个 URL 中应该有地址,当然可能不回是 IP 而是服务器域名答,当然也有可能人家没有把 URL 直接写在 WSDL 中,但会另外在文档中告诉你 URL 地址。你为什么需要知道 IP 地址而不直接用域名?

从分布式的松耦合设计中我们了解到,客户端应该只看 WSDL 再加上额外提供的可选的 URL (如果 WSDL 中没有提供这个 transport 配置的话)就应该可以完成与服务器的数据交换,不再需要其它条件。

7、1个外网IP怎么解决两个域名上网

设置Apache虚拟主机通常有两种方案

一、基于IP的虚拟主机

这种方式需要在机器上设置IP别名,象上面的例子,在一台机器的
网卡上绑定多个IP地址去服务多个虚拟主机。
若该机器的IP地址为192.168.11.2(account.yourdomain.com),首先
你要设置IP别名(假设用192.168.11.4作为其别名IP)。加下面的行到
/etc/rc.d/rc.local,确保每次启动后自动运行。

192.168.11.255 up

然后你需要设置/etd/httpd/conf/httpd.conf文件:

《VirtualHost 192.168.11.4》*
ServerAdmin [email protected]
DocumentRoot /home/httpd/sales.yourdomain.com
ServerName sales.yourdomain.com
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
《/VirtualHost》

然后分别创建目录
/home/httpd/sales.yourdomain.com,
/var/log/httpd/sales.yourdomain.com
,放相应的网站内容到目录/home/httpd/sales.yourdomain.com下即可,并确保
你内部的DNS指定sales.yourdomain.com的A记录到IP地址192.168.11.4 。

注:这种基于IP的虚拟主机有一个缺点,就是你需要更多的IP地址去服务各自的
虚拟主机,如果你仅仅有一个IP地址,那么你将可以考虑用基于名字的虚拟主机
方案。

二、基于名字的虚拟主机:

它的优势就是不需要更多的IP地址,容易配置,不需要其它软硬件,现代的
浏览器大多都支持这种方式。与基于IP的虚拟主机一样,你需要编辑文件
/etc/httpd/conf/httpd.conf

NameVirtualHost 192.168.11.2

《VirtualHost 192.168.11.2》
ServerAdmin [email protected]
DocumentRoot /home/httpd/sales.yourdomain.com
ServerName sales.yourdomain.com
ErrorLog /var/log/httpd/sales.yourdomain.com/error_log
TransferLog /var/log/httpd/sales.yourdomain.com/access_log
《/VirtualHost》

《VirtualHost 192.168.11.2》
ServerAdmin [email protected]
DocumentRoot /home/httpd/hr.yourdomain.com
ServerName hr.yourdomain.com
ErrorLog /var/log/httpd/hr.yourdomain.com/error_log
TransferLog /var/log/hr.yourdomain.com/access_log
《/VirtualHost》

注: 你需要加NameVirtualHost 指示在最前面,下面依次为各个虚拟主机,
为了让它工作,你需要把sales.yourdomain.com, hr.yourdomain.com的DNS
都指向IP地址192.168.11.2

上面的两种都将工作,如果是在外部网段,在互联网上提供WWW服务,你可能
没有足够的真实IP地址来支持多个虚拟主机,便可用基于名字的虚拟主机方案,
若是在内部网段上,你有较多的内部保留IP地址,将没有太大的区别。

8、PHP如何获取服务器外网IP

1.关于外网IP变更问题,如果你手头上有 IP资源,建议绑定。就是你申请的静态IP。
2.如果自己没有静态IP,那么如果你有域名,可以通过 花生壳这些软件,绑定自己的服务器。这样就算IP怎样变化,直接访问域名就可以了。
2.1.花生壳带有一些二级域名的,功能也差不多。
-----------------------------------

另外,可以写一个功能cURL,让你的服务器定期访问一个站点(私有站点,要权限进入),这个站点你可以获取访问者的IP。

9、C#程序怎么获得外网IP和内网IP?

1、企业网内部的工作站通过出口路由器的NAT转换能够上Internet网。 2、企业网(目前来说大部分是教育网)内部有一些服务器,如图中的Server,本身具有私网IP地址10.0.0.3,而且需要被公网所访问,所以需要在企业网的出口处对其做静态NAT转换,将其转换为一个公网IP地址2.0.0.5。企业外部的公网用户通过该服务器公网IP或解析后的域名对其进行访问,而企业内部的工作站如果使用公网上的一台DNS,那么也将使用域名对该服务器进行访问。 3、企业网(目前来说大部分是教育网)内部还有一些服务器,如图中的Game-Server,它本身具有公网IP地址,它也既需要被私网用户所访问,也需要被公网用户所访问。三、解决方案 1、常规配置: 就按照拓扑图中的配置方法,WorkStation应该是可以访问到服务器Server的,只不过需要公网路由器的参与。具体过程是WorkStation发出一个以Server的公网IP(2.0.0.5)为目标地址的数据包,源地址是10.0.0.2,这个数据包经过Router时,它会首先遵从路由表进行路由, 2.0.0.5这个地址虽然属于运营商分给我们的一段公网IP的一部分,但由于该地址并不与任何接口同属一个网段,所以路由器只会按照缺省路由路由这个数据包到公网路由器,从物理端口向外发出时,NAT会起作用,这个数据包的源IP会被替换为2.0.0.1(地址池里的第一个地址)。当公网路由器收到这个数据包时,它查目标地址所在网段,发现这个地址已经被分给该企业网,所以会遵从那条路由将该数据包发回到Router。此时这个数据包的源IP是2.0.0.1,目标IP为2.0.0.5,Router查NAT表发现2.0.0.5这个公网IP应按照配置了的静态NAT表项转换为10.0.0.3,所以当路由器把这个数据包发给Server时,数据包的目的IP就被转换成了10.0.0.3,而源IP仍为2.0.0.1。当Server回复这个数据包时也按照对等的方式返回WorkStation。总结地说,就是这个过程是需要公网路由器参与完成的,而公网设备对我们来说是不可控的,所以当公网路由器因为某种原因拒绝参与这个过程时(比如出口链路断),这种访问方式将变为不可行。而且数据包要在企业网与公网的路由器之间走了一个环,浪费了带宽及设备的性能资源。
采用这种方法时,我从WorkStation上用tracert命令数据包的行走路径,更清晰地反应了这一过程: C:\Documents and Settings\bluephoenix>tracert 2.0.0.5 Tracing route to 2.0.0.5 over a maximum of 30 hops 1 <1 ms <1 ms <1 ms 10.0.0.1
2 <1 ms <1 ms <1 ms 1.1.1.2
3 * * * Request timed out.
4 3 ms 3 ms 3 ms 2.0.0.5 2、DNS解析 不论私网用户和公网用户他们访问服务器时实际上一般都是通过DNS来完成的。让私网用户将DNS指向私网内的一台可管理DNS也可以解决这个问题,即修改DNS中关于Server的解析记录,让其指向Server的私网IP即可,改过之后用户就可以使用通常的域名对该服务器进行访问了,只不过该过程是透明的,用户并不知道已经使用了私网IP在进行访问。 这种方法对我们来说比较轻松,没有给我们增加维护成本,请大家尽量说服用户采用这样的方法,但该方法应用场合有限,如果私网用户非要使用公网IP地址而不是域名来对Server进行访问,这种方法就行不通了,那就必须采取第三种方法。 3、loopback与策略路由法 Router的配置步骤为: (1) 建立loopback接口,随便配置一个IP地址,并将其设为ip nat ouse (2) 建立Access-list,用来匹配私网客户端访问Server以及Server做回应的数据流 (3) 定义policy-route table,设置策略缺省路由指向loopback接口,设置ip policy-route enable。 (4) 定义route-map,设定匹配Access-list的数据流都使用策略路由;并将这一route-map应用到接口。 (5) 建立一个null 0接口,并由ip nat pool所形成的路由指向null 0接口,以防止不能命中NAT规则的报文在企业网路由器和公网路由器之间震荡。(这一步不是必须的,但为了稳定起见,建议作这一步;另外只能在这种方法中使用指向null 0的路由,如果在第一种方法中使用了,那么数据包将不会在企业网路由器和公网路由器之间环游一周,而直接被陷在企业网路由器中了,将导致第一种方法失败。)

与获取外网ip域名相关的知识