‘壹’ linux:怎样获取服务器IP地址
第一步:激活网卡 系统装好后默认的网卡是eth0,用下面的命令将这块网卡激活。
# ifconfig eth0 up 第二步:设置网卡进入系统时启动想要每次开机就可以自动获取IP地址上网,就要设置网络服务在系统启动时也启动。Linux有一点与windows不同的是很多服务默认是停止的,而且你在某次使用该服务时启动这个服务,但是没设置它为默认启动,则下次进入系统这个服务依然是停止的。下面是设置网络服务在系统启动时也启动的方法。使用chkconfig命令让网络服务在系统启动级别是2345时默认启动。# chkconfig --level 2345 network on第三步:修改网卡文件ifcfg-eth0修改ifcfg-eth0文件,设置ONBOOT的值为yes,让网络服务启动时使用该网卡。设置BOOTPROTO的值为dhcp,让网卡从DHCP服务器自动获取IP地址。# vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOT=yesBOOTPROTO=dhcp总结:通常情况下第三步是最重要的,因为大部分Linux系统默认网络服务是系统启动时也启动的,网卡也是启用的,只要设置好第三步,然后使用下面的命令启动网络服务就OK。# service network start配置静态IP地址上网与动态IP地址上网同出一辙,修改ifcfg-eth0,然后用命令service network retart重启网络服务。DEVICE=eth0
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS=8.8.8.8
BOOTPROTO=static
ONBOOT=yesdebian: 编辑/etc/network/interfaces# The loopback network interfaceauto loiface lo inet loopback
# The primary network interface
allow-hotplug eth0auto eth0iface eth0 inet static
address 192.168.1.36
netmask 255.255.255.0
gateway 192.168.1.10 #公司的网关是192.168.1.10,一般是192.168.1.1
保存编辑结果,并重启网络服务
‘贰’ Linux下如何通过编程得到DNS ip地址和默认网关ip地址。(C 语言)
改配置文件不行么??
IP和netmaske在/etc/sysconfig/network-scripts/ifcfg-eth0 (如果只有一块网卡)
DNS服务在Linux中式named需要安装可以在网上搜到
首选DNS的设置在/etc/resolv.conf
‘叁’ linux 下获取本地ip地址后 怎样
在进行Linux网络编程时,经常用到本机IP地址。本文罗列一下常见方法,以备不时之需。
获取本机IP地址,是一个相当灵活的操作,原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的。比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡设置别名,可以重命名网卡。用户计算机所在网络拓扑结构未知,主机名设置是一个可选项,并且同样可以为一个计算机绑定多个主机名等,这些信息都会有影响。脱离了网络连接,单独的网络地址没有任何意义。编程中遇到必须获取计算机IP的场景,应该考虑将这一选项放到配置文件中,由用户自己来设置。
参考网络和书本,编程获取本机IP地址大约有以下几种方法。
方法一:ioctl()获取本地IP地址
Linux 下 可以使用ioctl()函数以及结构体 struct ifreq和结构体struct ifconf来获取网络接口的各种信息。
具体过程是先通过ictol获取本地的所有接口信息,存放到ifconf结构中,再从其中取出每个ifreq表示的ip信息(一般每个网卡对应一个IP地址,如:”eth0…、eth1…”)。
先了解结构体 struct ifreq和结构体struct ifconf:
//ifconf通常是用来保存所有接口信息的
//if.h
struct ifconf
{
int ifc_len; /* size of buffer */
union
{
char *ifcu_buf; /*input from user->kernel*/
struct ifreq *ifcu_req; /* return from kernel->user*/
} ifc_ifcu;
};
#define ifc_buf ifc_ifcu.ifcu_buf /*buffer address */
#define ifc_req ifc_ifcu.ifcu_req /*array of structures*/
//ifreq用来保存某个接口的信息
//if.h
struct ifreq {
char ifr_name[IFNAMSIZ];
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
short ifru_flags;
int ifru_metric;
caddr_t ifru_data;
} ifr_ifru;
};
#define ifr_addr ifr_ifru.ifru_addr
#define ifr_dstaddr ifr_ifru.ifru_dstaddr
#define ifr_broadaddr ifr_ifru.ifru_broadaddr
‘肆’ linux c怎么获得IPv6地址
编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
#BOOTPROTO="static"
HWADDR="2C:27:D7:31:2C:4C"
#IPADDR="192.168.0.2"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
保证IPV6选项为YES ,所处环境中有IPV6网路的话就可以自动获取了.自己也可以用linux搭建一个.
然后用ifconfig eth0 查看网卡信息参数
‘伍’ 获取Linux IP地址的六种方法总结
本文总结六种查看Linux IP地址的方法,方便以后的运维开发工作。
在介绍前先学习一下三个命令行筛选的主要的指令,也是频繁使用到的命令。
1、head。 head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10。
运行head --help查看说明信息:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
2、grep。 grep 命令用于查找文件里符合条件的字符串。运行grep --help查看说明信息,参数太多主要有以下几种:
grep -r递归选择。
grep -v反选,显示不包含匹配文本的所有行。
grep -n显示符合样式的那一行之前。
grep -A显示符合范本样式的那一列之外,并显示该行之后的内容。
3、awk。 强大的文本分析工具,命令使用过于复杂(awk --help),只需要知道 awk '{print$2}'为打印第二行数据。
4、tail 。tail命令可用于查看文件的结束部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10。tail --help查看主要的参数:
tail -n显示最后多少行
tail -c显示最后十个字符
tail -f 循环读取,跟踪显示最后十行
5、cut。 显示每行从开头算起的文字。
cut -b :以字节为单位进行分割。
cut -c :以字符为单位进行分割
cut -d :自定义分隔符,默认为制表符
cut -f :与-d一起使用,指定显示哪个区域
无线网卡地址:
echo wlan0=`ifconfig wlan0 | head -n2 | grep inet | awk '{print$2}'`
有线网卡地址:
echo eth0=`ifconfig eth0 | head -n2 | grep inet | awk '{print$2}'`
或者命令:
ifconfig | grep "inet " | cut -d: -f2 | awk '{print $1}' | grep -v "^127."
无线网卡地址:
ip address | grep wlan0 | awk '{print$2}'
有线网卡地址:
ip address | grep eth0 | awk '{print$2}'
或者
echo eth0=`ip address show eth0 | head -n4 | grep inet | awk '{print$2}'
echo wlan0=`ip address show wlan0 | head -n4 | grep inet | awk '{print$2}'
运行hostname -help命令查看说明信息:
Program options:
-a, --alias alias names
-A, --all-fqdns all long host names (FQDNs)
-b, --boot set default hostname if none available
-d, --domain DNS domain name
-f, --fqdn, --long long host name (FQDN)
-F, --file read host name or NIS domain name from given file
-i, --ip-address addresses for the host name
-I, --all-ip-addresses all addresses for the host
-s, --short short host name
-y, --yp, --nis NIS/YP domain name
hostname -i得到环回地址127.0.1.1, hostname -I得到具体的网卡信息192.168.31.82 。
php语言查看ip就是使用函数shell_exec来执行shell命令。
比如:
<?php
echo shell_exec("echo wlan0=`ifconfig wlan0 | head -n2 | grep inet | awk '{print$2}'`");
?>
然后执行php ip.php 。shell_exec()里面可以放置任何shell命令。这个方法的意义在于php可以通过网页对外提供服务。
#!/usr/bin/env python
import socket
import fcntl
import struct
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
Local_wlan0=get_ip_address("wlan0")
Local_lo=get_ip_address("lo")
#Local_eth0=get_ip_address("eth0")
print Local_wlan0
print Local_lo
#print Local_eth0
利用socket包,然后执行python ip.py 得到wlan0信息。
#!/usr/bin/env python
import os
def get_ip():
out = os.popen("echo wlan0=`ifconfig wlan0 | head -n2 | grep inet | awk '{print$2}'`").read()
print out
if __name__ == '__main__':
get_ip()
和php的shell_exec函数类似,os.popen()里面可以放置任何shell命令。注意有个函数os.system的结果只是命令执行结果的返回值,执行成功为0;os.popen()可以读出执行的内容,输出的结果比较特殊,带换行符\n 。
‘陆’ 怎么用C语言获取Linux系统的网卡IP地址
man exec 里面的函数可以用来执行命令
‘柒’ 请问linux下有c语言函数或者代码可以获取与之相连设备的ip吗
有的fd为你连接设备的网络套接字。
你直接输入套接字就可以得到了连接设备ip和端口了。
struct sockaddr_in sa;
int len1 = sizeof(sa);
if(getpeername(fd, (struct sockaddr *)&sa, &len1))
{
fprintf(stderr,"get client ip and port failed,exit!\n");
}
printf("ip=%s|端口=%s\n",inet_ntoa(sa.sin_addr),ntohs(sa.sin_port));ip|port
‘捌’ Kali Linux常用服务配置教程获取IP地址
下面以Kali Linux为例,演示获取IP地址的方法
(1)设置网络接口为自动获取IP地址。在Kali Linux的收藏夹中单击图标,将显示所有的程序,如图1.8所示。
(2)单击“设置”图标,将打开“设置”窗口,如图1.9所示。
(3)选择“网络”选项,单击有线连接中的齿轮按钮,将显示“有线”对话框,如图1.10所示。
(4)勾选“自动连接”复选框。然后,单击IPv4标签,将显示IPv4选项卡,如图1.11所示。
(5)在该界面选择“自动(DHCP)”选项。然后,单击“应用”按钮。接下来,就可以请求获取IP地址了。执行命令如下所示:
root@daxueba:~# dhclient eth0 –d
Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/00:0c:29:25:89:95
Sending on LPF/eth0/00:0c:29:25:89:95
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
DHCPREQUEST of 192.168.0.12 on eth0 to 255.255.255.255 port 67
DHCPOFFER of 192.168.0.12 from 192.168.0.10
DHCPACK of 192.168.0.12 from 192.168.0.100
bound to 192.168.0.12 -- renewal in 277 seconds.
从输出的信息中,可以看到成功获取到IP地址192.168.0.12。由此可以说明,搭建的DHCP服务测试成功。此时,用户查看地址租约文件dhcpd.leases,也可以看到分配的IP地址。如下所示:
root@daxueba:~# cat /var/lib/dhcp/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.3.5
# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;
lease 192.168.0.10 {
starts 1 2018/07/02 10:15:00;
ends 1 2018/07/02 10:25:00;
cltt 1 2018/07/02 10:15:00;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:5c:ae:aa;
client-hostname "daxueba";
}
lease 192.168.0.11 {
starts 1 2018/07/02 10:18:17;
ends 1 2018/07/02 10:28:17;
cltt 1 2018/07/02 10:18:17;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:99:92:4f;
uid "\001\000\014)\231\222O";
set vendor-class-identifier = "MSFT 5.0";
client-hostname "Test";
}
lease 192.168.0.12 {
starts 1 2018/07/02 10:34:56;
ends 1 2018/07/02 10:44:56;
cltt 1 2018/07/02 10:34:56;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:25:89:95;
client-hostname "daxueba";
}
从输出的信息中,可以看到DHCP服务分配出去的IP地址及对应租约信息。
‘玖’ Linux如何获取IP地址
输入 ifconfig eth0 ,因为Linux系统装好后默认网卡是eth0
‘拾’ linux C自动获取局域网可用IP
提供一个思路:
可以用libpcap,先不设置IP,设置网口为混杂模式,抓取一定时间的包,然后统计包里面没被使用的IP地址,如果一个IP被使用,必定在网络中会有ARP通信。