Làm thế nào để tôi có được cổng mặc định trong LINUX cho đích?


11

Tôi đang cố gắng để có được cổng mặc định, sử dụng đích 0.0.0.0

tôi đã sử dụng lệnh này: netstat -rn | grep 0,0.0.0

và nó trả về danh sách này:

Destination - Gateway      - Genmask         - Flags - MSS - Window - irtt - Iface
10.9.9.17   - 0.0.0.0      - 255.255.255.255 - UH    - 0     0        0    - tun0
133.88.0.0  - 0.0.0.0      - 255.255.0.0     - U     - 0     0        0    - eth0
0.0.0.0     - 133.88.31.70 - 0.0.0.0         - UG    - 0     0        0    - eth0

Mục tiêu của tôi ở đây là ping cổng mặc định bằng cách sử dụng đích 0.0.0.0; do đó, đó là "133,88,31,70"; nhưng cái này trả về một danh sách vì sử dụng 'grep'.

Câu hỏi là: Làm thế nào để tôi chỉ nhận được cổng mặc định? Tôi sẽ cần nó cho tập lệnh bash của tôi để xác định xem kết nối mạng có hoạt động hay không.

Câu trả lời:


21
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE

Điều này sẽ giải quyết vấn đề của bạn.


@Suezy Hà! Xem? ôi
Jeremy Powell

Tôi nghĩ rằng đóng dấu ngoặc đơn / đóng dấu ngoặc đơn ở cuối - tôi làm việc rất tốt!
Mark K Cowan

3
Tôi đã thấy khá nhiều câu trả lời trực tuyến với lệnh này, nhưng không ai trong số họ giải thích lý do tại sao "hiển thị mặc định" được sử dụng. Trong thực tế "ip lộ trình" mà không có bất kỳ tham số nào thực hiện chính xác điều tương tự đối với tôi. Vì vậy, câu hỏi của tôi là tại sao có "mặc định" trong lệnh? Nó có nghĩa là gì?
dùng658991

@ user658991 Tôi đã xuống hố thỏ này và bạn hoàn toàn đúng. Nó không làm trên các phiên bản phổ biến nhất ipngoài kia. Trên thực tế ip route showlà một bí danh ip route listvà bạn có thể kiểm tra man ipxem tiểu ban này có cú pháp không ip route { list | flush } SELECTOR... Và không một trong số các bộ chọn hợp lệ được liệt kê là default. Tôi cảm thấy ip route show table default nên làm những gì chúng ta muốn, nhưng thật không may, nó không. Đối với bất kỳ ai khác, cũng khớp với phần đầu của dòng (bạn đã được cảnh báo):ip route show | awk '/^default/{print $3}'
L0j1k

5
 ip route show default 0.0.0.0/0

Lệnh này nhanh hơn nhiều sau đó ip route | grepmặc định trên hệ thống có nhiều (10000+) tuyến

Tìm ví dụ từ bộ định tuyến của tôi với BGP đầy đủ và tuyến mặc định thủ công làm bản sao lưu

router:~# time ip route show default 0.0.0.0/0
default via XXX.XXX.192.254 dev eth0.123 

real    0m0.707s
router:~# time ip route | grep default
default via XXX.XXX.192.254 dev eth0.123 

real    0m8.596s
  • bởi vì ip route show default showtất cả các tuyến đường đối với tôi không chỉ tuyến đường mặc định
  • bởi vì ip route getkhông chấp nhận mặc định hoặc 0.0.0.0/0 làm tham số

+1 để thể hiện tính năng lọc trực tiếp qua iproute2 ! có rất nhiều trường hợp Bộ tiện ích tuyệt vời này là chính xác hơn, đáng tin cậy, và performant hơn (phải thừa nhận là sáng tạo) di sản Linux textfu
RubyTuesdayDONO

1
Đây là một câu trả lời tuyệt vời! nhưng tôi vẫn hơi bối rối bởi tài liệu của iproute2. "Mặc định" trong lệnh biểu thị điều gì? Nếu tôi đang đọc tài liệu chính xác, lệnh này sẽ giống như "ip route show to default 0/0", tôi có đúng không? định dạng "0/0" là gì?
dùng658991

3

ip route show defaultnên thực hiện thủ thuật cho cổng mặc định hoặc bạn có thể sử dụng ip route get <someip>để xem tuyến đường cho một địa chỉ IP cụ thể là gì.


Tôi đã thử tuyến ip và nó hiển thị danh sách cho tất cả các cổng .. và vâng, cái mặc định cũng được hiển thị ở phía dưới. cảm ơn vì điều đó. =) Nhưng mục tiêu của tôi ở đây là lấy địa chỉ IP được sử dụng cho cổng mặc định đó. Sử dụng tập lệnh bash, tôi sẽ ping cái đó để kiểm tra xem nó có lên hay không.
Suezy

Tôi nhận được bốn mục cho "hiển thị mặc định". "Tuyến đường ip hiển thị mặc định | awk '/ default / {print $ 3}'" sẽ giúp bạn có địa chỉ IP một mình.
David Pashley

2

Nếu bạn muốn thực hiện việc này bằng cách sử dụng netstat(vì vậy nó sẽ hoạt động trên một thứ KHÔNG phải Linux ), giải pháp chung là:

netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'

Điều này cho thấy các bảng định tuyến, sử dụng IP thay vì phân giải tên máy chủ ( netstat -rn),
tìm cổng mặc định (dòng bắt đầu bằng 0.0.0.0hoặc default)
và in máy chủ cổng (trường thứ hai của kết quả).

Sự tăng sinh của các \ký tự trong biểu thức chính quy là rất quan trọng:

  • \(\)chỉ định một nhóm
  • \| là ký tự xen kẽ (vật bên trái hoặc vật bên phải khớp)
  • các dấu chấm trong địa chỉ IP được biểu thị bằng \.- có nghĩa là ký tự bằng chữ .trái ngược với Biểu thức chính quy .(khớp với bất kỳ ký tự đơn nào)

1
grep -ehoặc egrepcũng sẽ thực hiện mánh khóe mà không cần dấu ngoặc và đường ống để thoátegrep '^(default|0\.0\.0\.0)'
Mark K Cowan

1

Đây là cách tôi làm điều đó:

#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}

1
 ip route show default | grep default | awk {'print $3'}

Nó có ở đây không


Tại sao grep defaultkhi bạn đã chỉ định defaulttuyến đường trong iplệnh của bạn ?
lindhe

0

Cách dễ dàng RẤT ... hỏi bảng định tuyến cách truy cập IP bên ngoài mạng của nó

Google DNS == 8.8.8.8

lộ trình ip nhận được 8.8.8.8


0
ip route show 0/0

hoặc là

ip route show 0.0.0.0/0

hoặc là

ip route show 0.0.0.0/0.0.0.0

hoặc là

ip -f inet route show default

hoặc là

ip -4 route show default
  • Các phiên bản tôi đã kiểm tra 'ip lộ trình' và 'danh sách tuyến ip' được coi là tương đương (không phải là trường hợp 'ip lộ tuyến')
  • Có một lời giải thích tại https://ormszilla.kernel.org/show_orms.cgi?id=197899

Nếu tôi hiểu chính xác, việc tìm kiếm cổng mặc định cho tuyến đường chính xác đó - tuyến đường toàn số - là 0.0.0.0/0.0.0.0 (hoặc 0/0) cho IPv4 hoặc 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (hoặc: :) cho IPv6.

Tuy nhiên (!), Mà không chỉ định AF bạn muốn sử dụng (-4 hoặc -6 hoặc -f inet hoặc -f inet6) hoặc chỉ định tuyến đường toàn số là tiền tố IPv4 hoặc IPv6 (0/0 ngụ ý IPv4) , nó không thể tìm ra 'mặc định' là gì ...

Cá nhân, tôi không cảm thấy trang đàn ông rất rõ ràng về điều này, nhưng đó chỉ là hai xu của tôi.

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.