Python中是否有一个函数可以确定主机名是域名还是IP(v4)地址?
注意,域名可能如下:alex.foo.bar.com
或甚至(我认为这是有效的):1.2.3.com
。
答案 0 :(得分:1)
IP和域名之间的视觉差异之一是,当您删除IP地址中的点时,结果将是数字。因此,基于此差异,我们可以检查输入字符串是IP还是域地址。我们删除输入字符串中的点,然后检查是否可以将结果转换为整数,或者得到异常。
FirebaseRecyclerOptions<Items> options = new FirebaseRecyclerOptions.Builder<Items>().setQuery(firebaseDatabase.child("Items").child(categ).orderByChild("name"), Items.class).build();
FirebaseRecyclerAdapter<Items, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Items, NewOrder.UsersViewHolder>(options)
{
@Override
public NewOrder.UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.items2,parent,false);
return new NewOrder.UsersViewHolder(view);
}
@Override
protected void onBindViewHolder(NewOrder.UsersViewHolder holder, int position, Items model) {
holder.setName(model.getName());
holder.setDescription(model.getDescription());
holder.setProfilePic(model.getImage());
holder.setPrice(model.getPrice());
final String PID = getRef(position).getKey();
String quant = model.getQuantity().toString();
Integer qtt = Integer.parseInt(quant);
if(qtt <= 5){
holder.setoos();
holder.mview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(NewOrder.this, "Sorry This Product is out of stock!", Toast.LENGTH_SHORT).show();
}
});
}else {
holder.mview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent profileIntent = new Intent(NewOrder.this, Item.class);
profileIntent.putExtra("Product id", PID);
profileIntent.putExtra("Category", categ);
profileIntent.putExtra("Shop id",shopname);
profileIntent.putExtra("Shopkeeper id",shopid);
startActivity(profileIntent);
}
});
progressBar.setVisibility(View.GONE);
}
};
items.setAdapter(firebaseRecyclerAdapter);
items.setItemViewCacheSize(500);
firebaseRecyclerAdapter.startListening();
}
public class UsersViewHolder extends RecyclerView.ViewHolder {
View mview;
public UsersViewHolder(@NonNull View itemView) {
super(itemView);
mview = itemView;
}
public void setName(String name) {
TextView userNameView = mview.findViewById(R.id.name);
String str = name;
String cap = str.substring(0, 1).toUpperCase() + str.substring(1);
userNameView.setText(cap);
}
public void setDescription(String description) {
TextView userStatusView = mview.findViewById(R.id.description);
userStatusView.setText(description);
}
public void setPrice(String price) {
TextView userStatusView = mview.findViewById(R.id.price);
userStatusView.setText("₹"+price);
}
public void setoos(){
TextView orderstatus = mview.findViewById(R.id.oof);
orderstatus.setVisibility(View.VISIBLE);
}
public void setProfilePic(String profilepic) {
final ImageView image = mview.findViewById(R.id.userSingleImage);
final StorageReference mImageRef =
FirebaseStorage.getInstance().getReference(shopname+"/Product_image/thumbs/"+ profilepic + ".jpg");
final long ONE_MEGABYTE = 1024 * 1024;
mImageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(mview)
.load(mImageRef)
.into(image);
}
});
}
尽管在某些IP表示形式(如点分十六进制)(例如def is_ip(address):
return address.replace('.', '').isnumeric()
)中,IP地址中可以同时包含字母和数字。但是,顶级域名(.org,.com等)从不包含数字。使用下面的功能将比上面的功能在更多情况下起作用。
0xC0.0x00.0x02.0xEB
答案 1 :(得分:0)
我使用IPy来测试字符串是否是IP地址,如果它不是 - 假设它是域名。 E.g:
from IPy import IP
def isIP(str):
try:
IP(str)
except ValueError:
return False
return True