确定主机是否是Python中的域名或IP

时间:2015-06-03 16:53:18

标签: python ip-address urllib2 hostname url-parsing

Python中是否有一个函数可以确定主机名是域名还是IP(v4)地址?

注意,域名可能如下:alex.foo.bar.com或甚至(我认为这是有效的):1.2.3.com

2 个答案:

答案 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