0

What would be the most robust way to test if your internet is connected to wifi or ethernet in R?

I want to do an if statement, something like:

  if (internet == "wifi") {
    return(x) 
  } else if (internet == "ethernet") {
    return(y)
  } else { #no internet
    return(z)}

system("ipconfig", intern = T) seems to be useful but I'm not sure what to extract so that it correctly identifies wifi/ethernet each time no matter what the connection setup is.

I'm working in a windows environment.

thanks

user63230
  • 4,095
  • 21
  • 43
  • Are you trying to make this work for one operating system in particular? Or do you need it to work on Windows, Mac and Linux? This would seem very depending on operating system since this isn't something R itself cares about. – MrFlick Jan 21 '21 at 17:34
  • apologies, forgot to add windows, updated now! – user63230 Jan 21 '21 at 17:36
  • 1
    I'd suggest asking this either under different tags, or possibly at Super User instead of Stack Overflow. The question doesn't really have anything to do with R, but rather knowledge about various possible configurations and how the show up in the `ipconfig` output. – Gregor Thomas Jan 21 '21 at 18:14

1 Answers1

2

My code is not the most beautiful but it will return a data frame where you can simply read the connection status based on the column "Status" and "Interface Name". The main problem is that you might end up with various Ethernet/WiFi configurations and therefore it is quite complicated to parse ipconfigs output.

My version is based on the simple shell command netsh interface show interface

Here is the code:

netsh_lst = system("netsh interface show interface", intern = T)
netsh_df <- NULL

for (i in seq(1,length(netsh_lst))){
  
  current_line <- as.vector(strsplit(netsh_lst[i], '\\s+')[[1]])
  
  if (length(current_line)>4){
    current_line <- current_line[1:3]
    current_line[4] <- paste(current_line[4:length(current_line)], collapse = ' ')
    
  }
  if (length(current_line)>2){
    
    netsh_df = rbind(netsh_df,current_line)
    
  }
}

names <- netsh_df[1,]

colnames(netsh_df) <- names
netsh_df <- netsh_df[-1,]
row.names(netsh_df) <- 1:length(netsh_df[,1])
print(netsh_df)
benschbob91
  • 155
  • 12