Một lời cảnh báo với câu trả lời của tôi (cũng áp dụng cho hầu hết những người khác): Tôi không biết mục đích của ứng dụng của bạn. Nếu đó là một ứng dụng vứt đi để khắc phục một sự cố cụ thể hoặc để hiểu rõ hơn về mạng, không bao giờ được sử dụng lại, thì việc dựa vào chữ cái đầu tiên của giao diện có thể là một lựa chọn nhanh chóng và bẩn thỉu. Nếu bạn đang dự định viết đối thủ cạnh tranh tiếp theo cho Wireshark hoặc tcpdump, bạn cần chắc chắn rằng bạn đã làm đúng cho tất cả các loại trường hợp cạnh.
Và nếu ứng dụng bạn đang viết nằm ở đâu đó giữa những thái cực đó, chỉ có bạn (và khách hàng của bạn) có thể biết bạn cần cẩn thận đến mức nào để thực hiện logic của mình.
Những người khác đã chỉ ra rằng những cái tên không bao giờ đáng tin cậy, vì bất kỳ lý do nào. Vấn đề cuối cùng là một vấn đề rất phổ biến trong phần mềm: các giả định mã hóa cứng thay vì dựa vào các sự kiện đã biết / được ghi lại.
Vấn đề thứ hai chưa được đề cập cũng dựa trên giả định về yêu cầu của bạn: danh sách các giao diện bạn muốn liệt kê luôn chính xác là "giao diện ethernet phần cứng" và "giao diện wifi".
Vấn đề thứ ba là một giả định khác: tất cả giao diện sẽ rơi vào danh mục bạn có thể nghĩ ra ngay bây giờ. Còn Infiniband, như được đề cập bởi @ user4556274 thì sao? Làm thế nào về giao diện đường hầm cho VPN? Làm thế nào về giao diện cầu nối? Làm thế nào về giao diện cầu nối kết hợp giao diện vật lý và logic?
Nhưng có thể có các lựa chọn để thực hiện những gì bạn đang tìm kiếm. Đầu tiên, xác định chính xác những gì đặc trưng cho một giao diện bạn muốn liệt kê, so với giao diện mà bạn không liệt kê.
Trong hầu hết các trường hợp, một đặc điểm bạn có thể dựa vào là bảng định tuyến (tuy nhiên, điều này sẽ chỉ hoạt động miễn là giao diện được bật lên, vì vậy nó có thể không phải là thứ bạn đang thực sự tìm kiếm).
Bất kỳ giao diện nào có tuyến mặc định (nghĩa là tuyến đến 0.0.0.0) có thể là giao diện bạn đang tìm kiếm.
Lưu ý rằng ngay cả điều này vẫn dựa trên một giả định, chỉ là một điều đáng tin cậy hơn: có thể hiểu rằng một hệ thống được cấu hình để định tuyến tất cả lưu lượng truy cập đi qua một máy ảo hoặc thùng chứa docker (ví dụ: nếu có một container chạy tường lửa ). Và điều ngược lại cũng đúng: một sysadmin có khả năng khóa lưu lượng bên ngoài bằng cách xóa tuyến đường mặc định.
Một lựa chọn khác là đi bằng phần cứng thực tế và xem nó sử dụng trình điều khiển nào. Sau đó, bạn có thể loại trừ một số trình điều khiển nổi tiếng nhất định