Làm cách nào để tìm địa chỉ IP nội bộ của tôi?


208

Tôi đã cài đặt máy chủ Ubuntu 12.04, vì vậy tôi không có GUI. Khi tôi thực hiện lệnh ifconfig, tôi không thể tìm thấy địa chỉ ip internl của mình. Nó nói inet addr: 127.0.0.1.

Đây là đầu ra của ifconfig -a:

eth0   link encap:Ethernet  HWaddr 00:06:4f:4a:66:f0
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1   link encap:Ethernet  HWaddr 00:16:ec:05:c8:9c 
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo     Link encap:Local Loopback
    inet addr 127.0.0.1  Mask:255.0.0.0
    inet6 addr:  ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:65536  Metric:1
    RX packets:1800 errors:0 dropped:0 overruns:0 frame:0
    Tx packets:1800 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:143896 (143.b KB)  TX bytes:143896 (143.8 KB)

Dưới đây là nội dung của etc / mạng / giao diện:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Nếu ai đó có thể chỉnh sửa điều này cho tôi, nội dung của etc / mạng / giao diện sẽ nằm trên các dòng riêng biệt.

Đầu ra của máy chủ Askubfox.com là:

;; connection timed out; no servers could be reached.

Tôi đã thiết lập owncloud và webmin vài tháng trước và đang sử dụng chúng trong một tháng mà không gặp vấn đề gì. Tôi nghĩ rằng điện bị tắt một ngày 2 tháng trước và tôi không bao giờ bật lại máy chủ cho đến ngày hôm qua. Tôi đã không làm bất cứ điều gì có thể ảnh hưởng đến thiết lập internet Vì vậy tôi không chắc tại sao nó không hoạt động nữa. Theo như cấu trúc liên kết mạng của tôi, tôi có một card mạng pci-e cho pc. Đường ethernet đi từ card mạng đến bộ chuyển mạch, sau đó đến modem / bộ định tuyến từ đó.


1
@AvatarParto Đó là những giao diện đối mặt với truy cập công cộng, câu hỏi này là về các mạng nội bộ ...
Bruno Pereira

Vì tò mò, có gì /etc/network/interfacestrong đó?
Powerlord

Tôi biết cách sử dụng lệnh thư mục thay đổi, nhưng tôi không biết cách liệt kê các tệp một lần ở đó, tôi sẽ làm điều này như thế nào?
Cam Jones

lssẽ liệt kê các tập tin trong một thư mục. ls -lsẽ đưa ra một danh sách chi tiết. Để liệt kê nội dung của một thư mục cụ thể , ls -l /etc/network. Để thay đổi thành một thư mục và liệt kê nội dung cd /etc/network ;ls -l. Để đọc nội dung của etc/network/interfaces(đây là một tập tin) sudo pico /etc/network/interfaces. ( picolà một trình soạn thảo văn bản nhẹ - tốt cho việc đọc và chỉnh sửa cơ bản và ít đáng sợ hơn vi.)
douggro

Câu trả lời:


205

Các lệnh này sẽ cho bạn biết tất cả thông tin mạng

ip add

hoặc là

ifconfig -a

Nếu như bạn nói nó chỉ cung cấp cho bạn 127.0.0.1 thì có hai tùy chọn:

  1. Card mạng của bạn không được đính kèm hoặc không được hệ thống nhận ra

  2. Máy chủ DHCP mạng của bạn không chạy hoặc không được kết nối


Khi tôi đăng nhập, nó cho tôi biết có một vài nâng cấp hoặc cập nhật, vì vậy tôi cho rằng nó phải nói chuyện với trang web chính thức của Ubuntu để biết nó có cập nhật, vì vậy tôi nghĩ rằng internet của tôi đang hoạt động.
Cam Jones

@Skargetuy hãy thử mở Askubfox.com và vui lòng in tất cả ifconfig -a
kamil

Tôi không có GUI, mặc dù tôi sắp gõ nó ra.
Cam Jones

1
Làm thế nào tôi có thể trả lời các câu hỏi mà hai lựa chọn của bạn đặt ra?
Cam Jones

1
Tôi sẽ đề xuất iptùy chọn đầu tiên , sau đó ( không dùng nữa ) ifconfigsau đó.
Campa

212
hostname -I

Điều này sẽ cung cấp cho bạn chỉ địa chỉ IP mà không có thêm thông tin.


16
Thật hoàn hảo. Rất nhiều câu trả lời quá phức tạp (nhưng không tệ) .. câu trả lời này thật đơn giản.
dùng1003916

3
Câu trả lời hoàn hảo .. :)
john400

2
Theo trang man: `-I, --all-ip-address Hiển thị tất cả các địa chỉ mạng của máy chủ. Tùy chọn này liệt kê tất cả các địa chỉ được cấu hình trên tất cả các giao diện mạng. Giao diện loopback và địa chỉ liên kết cục bộ IPv6 bị bỏ qua. 'Vì vậy, điều này sẽ cung cấp cho bạn địa chỉ IP trên mạng mà bạn đã kết nối, nhưng cũng là IP của máy nếu bạn đang sử dụng nó như máy chủ ethernet hoặc lxd. Trong trường hợp của tôi, nó cung cấp hai địa chỉ vì tôi có lxd: 192.168.0.78 và 10.0.3.1
Sergiy Kolodyazhnyy

6
Vâng. Trong trường hợp của tôi, điều đó còn tệ hơn 10.0.2.15 172.18.0.1 172.17.0.1 172.20.0.1 172.21.0.1 172.22.0.1 172.19.0.1bởi vì tôi đang chạy một số container Docker;)
Alex

4
Upvote vì các giải pháp khác không hoạt động, ví dụ như trên hình ảnh
docker thô của docker

185

Đây là những gì tôi hiện đang đề nghị:

ip route get 8.8.8.8 | awk '{print $NF; exit}'

Ưu điểm của lệnh đó là bạn không cần phải biết giao diện nào bạn đang sử dụng (eth0? Eth1? Hoặc có thể wlan0?), Bạn không phải lọc địa chỉ localhost, hoặc địa chỉ Docker hoặc đường hầm VPN, v.v. và bạn sẽ luôn nhận được địa chỉ IP hiện đang được sử dụng cho các kết nối Internet tại thời điểm đó (quan trọng khi bạn được kết nối với cả ethernet và wifi hoặc qua VPN, v.v.).

Điều này sẽ kiểm tra không chỉ bạn có một IP chính xác được cấu hình trên một số giao diện (như phân tích cú pháp đầu ra của ifconfig) mà còn có bảng định tuyến được cấu hình để sử dụng chính xác.

Tôi tìm thấy ý tưởng đó trong câu trả lời này của Collin Anderson .

Tôi sử dụng nó trong tập lệnh Internalip trong bộ sưu tập tập lệnh của mình trên GitHub , mà bạn có thể cài đặt với:

wget https://rawgit.com/rsp/scripts/master/internalip
chmod a+x internalip

và sử dụng như:

internalip

hoặc là:

internalip TARGET

và bạn sẽ nhận được địa chỉ IP của mình sẽ được sử dụng để kết nối với địa chỉ IP TARGET . Mục tiêu mặc định là 8.8.8.8đó là phân giải DNS công cộng của Google và một mặc định tốt cho Internet.

Nhưng nếu bạn chạy nó với một IP khác:

internalip 127.2.3.4

Sau đó, bạn sẽ nhận được:

127.0.0.1

bởi vì đó là địa chỉ IP của bạn sẽ được sử dụng để kết nối với 127.2.3.4 trên giao diện loopback. Nó hữu ích khi mục tiêu của bạn là trên mạng LAN, VPN hoặc mạng đặc biệt khác, trong trường hợp đó, một số IP khác có thể được sử dụng cho các kết nối hơn IP mặc định để truy cập Internet.

IP bên ngoài

Để kiểm tra địa chỉ IP bên ngoài của bạn (địa chỉ mà các máy chủ trên Internet nhìn thấy khi bạn kết nối với chúng - có thể khác với địa chỉ IP nội bộ được mô tả ở đây), hãy xem câu trả lời này .


1
Đây là một câu trả lời tuyệt vời, cảm ơn! Cứu tôi đau đầu lắm! : D
dùng65165

Đây là một mẹo hữu ích, nhưng OP đã hỏi về một IP nội bộ, vì vậy, sẽ không an toàn khi cho rằng nó có thể định tuyến đến 8.8.8.8.
mc0e

@ mc0e Điểm tốt. Đó là lý do tại sao tập lệnh của tôi lấy một đối số tùy chọn cho một số IP khác - 8.8.8.8chỉ là mặc định. Trong câu trả lời của tôi, tôi đã sử dụng 127.2.3.4như một ví dụ. Bạn cũng có thể sử dụng một số IP trên mạng nội bộ của mình hoặc trên VPN. Vấn đề là bạn thường không có một địa chỉ IP nội bộ nhưng một vài địa chỉ khác nhau được sử dụng cho các mục tiêu khác nhau. Bằng cách này bạn có thể tìm thấy cái thực sự được sử dụng cho các kết nối đến một mục tiêu nhất định.
rsp

1
Chỉ để bạn biết, điều này mang lại IP bên ngoài trên Mac.
OZZIE

19

Tôi nghĩ điều đáng nói là việc chạy ifconfig cùng với tùy chọn -a sẽ hiển thị tất cả các giao diện có hay không giao diện có IP.

chỉ chạy ifconfig, sẽ chỉ hiển thị các giao diện có IP được gán.

Đây là một mẹo hay mà bạn có thể sử dụng để chỉ hiển thị IP bằng Perl.

# ifconfig | perl -nle'/dr:(\S+)/ && print $1'
192.168.1.100
127.0.0.1

Thẻ mạng của bạn được hệ thống nhận ra, đó là lý do tại sao nó hiển thị eth0 và eth1

Đây là một cách nhanh chóng để gán IP cho giao diện của bạn, sử dụng IP / Subnet hợp lệ tương ứng.

 ifconfig eth0 192.168.1.200/24 up 

sau đó chúng ta cần thêm một tuyến mặc định

route add default gw 192.168.1.1

Tốt,


1
Tôi sẽ thử phương pháp này nhưng bạn sẽ phải chia nhỏ thêm một chút để tôi hiểu nó, như trong cách tìm hoặc biết IP hợp lệ, mạng con và tuyến đường mặc định hợp lệ.
Cam Jones

đây là một gán IP tĩnh cho giao diện mạng của bạn, nghĩa là nếu bạn ở phía sau bộ định tuyến có mạng con 192.168.1.0/24 thì bạn có thể ping một ip ex. 192.168.1.200 và nếu bạn không nhận được phản hồi, hãy truy cập và sử dụng ifconfig interface_name IP_ADDRESS / MASK lên gw mặc định của bạn cần được thêm sau khi gán IP.
dùng1007727

8

Lệnh này sẽ hiển thị tất cả các địa chỉ IP cho một thiết bị:

dev=eth0
ip addr show $dev | awk '/inet/ {print $2}' | cut -d/ -f1

Nó sẽ in một hoặc hai dòng đầu ra. Địa chỉ đầu tiên là địa chỉ inet / IPv4 và địa chỉ còn lại là inet6 / IPv6 nếu hệ thống của bạn được cấu hình để hỗ trợ điều này.


6

Trong trường hợp, ifconfiglệnh không hiển thị địa chỉ IP, có một cách rất đơn giản và dễ dàng để tìm ra địa chỉ IP của máy Ubuntu thông qua GUI. Làm theo các bước dưới đây:

Nhấp vào biểu tượng mạng trong vùng thông báo và nhấp vào Thông tin kết nối . Tùy chọn biểu tượng mạng

Điều này xuất hiện một cửa sổ có một số thông tin, bao gồm địa chỉ IP. Thông tin địa chỉ IP


1

Có rất nhiều câu trả lời hay ở đây để lựa chọn, nhưng tôi nghĩ tôi sẽ chỉ ra facter thường, nhưng không nhất thiết phải được sử dụng với con rối để thu thập các sự kiện khác nhau về hệ thống. Ưu điểm chính của facter là nó mang lại cho sản lượng sạch đẹp mà tiết kiệm cho bạn tất cả các thao tác với grep, sed, awk, cut, perl, vv Nó sẽ không cho bạn biết giao diện bạn đang quan tâm, nhưng nếu bạn biết rằng, sau đó các sau đây cung cấp cho bạn IP mà không cần hành trình khác để dọn dẹp:

facter ipaddress_eth0 

1

lệnh ip

Đây là một biến thể trên ip addrđường.

ip-otùy chọn cho phép đặt tất cả thông tin trên một dòng - điều này hữu ích để phân tích cú pháp với các công cụ như awkhoặc perl. Kết hợp với -4tùy chọn, chúng tôi sẽ chỉ thấy địa chỉ IPv4. Do đó, đầu ra sẽ giống như thế này (lưu ý - thay thế wlan7 bằng giao diện bạn muốn kiểm tra):

$ ip -4 -o addr show wlan7
3: wlan7    inet 192.168.0.78/24 brd 192.168.0.255 scope global dynamic wlan7\       valid_lft 85654sec preferred_lft 85654sec

Như bạn có thể thấy, địa chỉ IP là cột / từ thứ 4 trong đầu ra. Phần còn lại, là bài tập phân tích cú pháp đơn giản thông qua công cụ bạn chọn. Ở đây, tôi đang sử dụng python:

ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 

Điều tương tự, chỉ với ở đây chuỗi <<<và thay thế lệnh$()

python -c "import sys;print sys.stdin.readlines()[0].split()[3]"  <<< $(ip -4 -o addr show wlan7)

Cá nhân, tôi có chức năng này được lưu dưới dạng một chức năng tốt trong ~/.bashrcviệc gõ ít hơn.

wlan_ip() {
    ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 
} 

Phiên bản của Perl và Ruby ngắn hơn một chút:

$ ip -4 -o addr show  wlan7 | perl -lane 'print $F[3]'                         
192.168.0.78/24

$ ip  -4 -o addr show wlan7 | ruby -n -e 'print $_.split()[3]'                 
192.168.0.78/24

Dây đeo

Nếu bạn đã quen với việc sử dụng các công cụ phân tích mạng, có lẽ bạn biết rằng để có được địa chỉ IP của mình, tất cả những gì bạn cần làm là xóa bộ nhớ cache của trình duyệt, bắt đầu chụp Wireshark trên giao diện cụ thể và tìm kiếm các GETgói http được truyền đi. Cột đích sẽ hiển thị địa chỉ IP của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.